【发布时间】:2015-08-21 01:14:23
【问题描述】:
我正在迁移现有程序以使用async/await(通过Babel 的bluebirdCoroutines)来学习这种风格。我一直在看这个tutorial。
我对以下行为有点困扰。这个 sn-p 按预期工作:
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;
});
}
我错过了什么?
【问题讨论】:
-
迭代是同步的,据我了解,它会按顺序发生。它认为
for..on循环提案旨在改善这一点,但它并没有在任何地方实施。请参阅此处了解信息github.com/jhusain/asyncgenerator
标签: javascript node.js bluebird ecmascript-2016