
3.2
非同期パターン(素の
JavaScript
編)
53
if(err) {
return callback(err);
}
saveFile(filename, body, err => {
if(err) {
return callback(err);
}
console.log(`Downloaded and saved: ${url}`);
callback(null, body);
});
});
}
最後にこれらの関数を使うよう
spider()
を変更しましょう。
function spider(url, callback) {
const filename = utilities.urlToFilename(url);
fs.exists(filename, exists => {
if
(exists) {
return callback(null, filename, false);
}
download(url, filename, err => {
if(err) {
return callback(err);
}
callback(null, filename, true);
})
});
}
spider()
の機能とインタフェースはまったく変えずに、内部実装のみを基本原則に則ってリファク
タリングした結果コードのネストが浅くなりました。また、複数の関数に分割することで再利用性が増
しテストが容易になります。これに加えて
saveFile()
と
download()
を別のモ ...