rol*_*lls 7 javascript node.js bluebird ecmascript-7
我正在迁移现有的程序以使用async/ await(via Babel's 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);
}
Run Code Online (Sandbox Code Playgroud)
重写如下,它仍然有效,但第一次操作不再平行(完成需要更长的时间)!
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);
}
Run Code Online (Sandbox Code Playgroud)
这是执行 dlPart()
function dlPart(url, num, dir) {
var cmd = 'wget --quiet "' + url + '" -O ' + dir + "/" + num;
return exec(cmd).then(() => {
return dir + '/' + num;
});
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
该.map函数是异步的,因此其余代码不必等待它,它会在准备就绪时完成。然后,您将其替换为for loop在完成时阻止所有内容的 。
| 归档时间: |
|
| 查看次数: |
396 次 |
| 最近记录: |