我正在遷移現有程序以使用async
/await
(通過Babel
的bluebirdCoroutines
)以瞭解此樣式。我一直在尋找這tutorial。ES7異步/等待概念問題
我對以下行爲有些困擾。這段代碼按預期工作:
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;
});
}
我缺少的是執行?
迭代是同步的,從我的理解,它會在順序發生。它認爲'爲..循環提議旨在改善這一點,但它並未在任何地方實施。查看信息https://github.com/jhusain/asyncgenerator – elclanrs