Async: 在继续之前等待 async.eachLimit 的所有迭代完成的好模式是什么?

创建于 2019-04-17  ·  4评论  ·  资料来源: caolan/async

问题:异步有点新,并有以下代码来下载大量文件,大约同时下载 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 时,“已完成”很快就会被触发。

等待所有迭代完成的好方法是什么?

question

所有4条评论

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 但由于某种原因它不起作用。 这就是促使我在这里发帖的原因。 我得再试一次。

你成功了吗? 我面临着同样的问题——它只是不等待所有迭代的承诺完成。

此页面是否有帮助?
0 / 5 - 0 等级