このスタイルを学ぶために、既存のプログラムをasync
/await
を ( 経由でBabel
)使用するように移行しています。bluebirdCoroutines
私はこのチュートリアルを見てきました。
以下の動作に少し困っています。このスニペットは期待どおりに機能します。
let parts = [];
let urlsP = urls.map((url, index) => {
return dlPart(url, index, tempDir);
});
for (let urlP of urlsP) { // Parallel (yay!)
parts.push(await urlP);
}
for (let part of parts) { // Sequential
await appendFile(leFile, part);
}
次のように書き直すと、まだ機能しますが、最初の操作はもはや並列ではありません (完了するまでにはるかに時間がかかります)!
let index = 0;
let parts = [];
for (let url of urls) { // NOT Parallel any more!!!
index++;
parts.push(await dlPart(url, index, tempDir));
}
for (let part of parts) {
await appendFile(leFile, part);
}
これはの実装ですdlPart()
function dlPart(url, num, dir) {
var cmd = 'wget --quiet "' + url + '" -O ' + dir + "/" + num;
return exec(cmd).then(() => {
return dir + '/' + num;
});
}
私は何が欠けていますか?