问题:异步有点新,并有以下代码来下载大量文件,大约同时下载 2 个
async.eachLimit(files, 2, async (file, callback) => {
reportStep("downloading");
console.log("async start: " + file.path);
await addFile(file.path, file.size);
console.log("async end: " + file.path);
callback();
})
reportStep("completed")
当然,当 async.eachLimit 继续执行 funcs 时,“已完成”很快就会被触发。
等待所有迭代完成的好方法是什么?
nvm,没有足够仔细地阅读文档。
还有另一个回调参数,最终将其全部包装在我可以等待的承诺中
function download(files) {
return new Promise((resolve, reject) => {
async.eachLimit(files, 2, async (file, callback) => {
reportStep("downloading");
console.log("async start: " + file.path);
await addFile(file.path, file.size);
console.log("async end: " + file.path);
callback();
}, (error) => {
if (error){
reject(error);
} else {
resolve();
}
})
});
}
await download(files)
旁注,如果您使用的是v3
的预发行版,则不需要包装器。 eachLimit
将返回一个承诺,如果你没有通过最终的回调。
嗯,我尝试等待 async.eachLimit 但由于某种原因它不起作用。 这就是促使我在这里发帖的原因。 我得再试一次。
你成功了吗? 我面临着同样的问题——它只是不等待所有迭代的承诺完成。