Async: qual é um bom padrão para esperar que todas as iterações de async.eachLimit terminem antes de prosseguir?

Criado em 17 abr. 2019  ·  4Comentários  ·  Fonte: caolan/async

pergunta: um pouco novo no assíncrono e tem o seguinte código para baixar muitos arquivos, 2 quase ao mesmo tempo

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")

Obviamente, "completed" é disparado rapidamente enquanto async.eachLimit continua executando funções.

Qual é uma boa maneira de esperar que todas as iterações sejam feitas?

question

Todos 4 comentários

nvm, não leu os documentos perto o suficiente.

há ainda outro parâmetro de retorno de chamada, acabei envolvendo tudo em uma promessa que posso esperar

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)

Nota lateral, se você estiver usando o pré-lançamento de v3 , você não precisa do wrapper. eachLimit retornará uma promessa se você não passar no retorno de chamada final.

hmm, tentei aguardar async.eachLimit, mas não estava funcionando por um motivo ou outro. Isso é o que me levou a postar aqui. Vou ter que tentar novamente.

Você teve sucesso? Estou enfrentando o mesmo - ele simplesmente não espera que todas as promessas das iterações terminem.

Esta página foi útil?
0 / 5 - 0 avaliações