Async: quel est un bon modèle pour attendre que toutes les itérations de async.eachLimit se terminent avant de continuer ?

Créé le 17 avr. 2019  ·  4Commentaires  ·  Source: caolan/async

question : un peu nouveau pour async et avoir le code suivant pour télécharger beaucoup de fichiers, 2 à peu près en même temps

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

Bien sûr, "terminé" est rapidement déclenché pendant que async.eachLimit continue d'exécuter les fonctions.

Quelle est une bonne façon d'attendre que toutes les itérations soient effectuées ?

question

Tous les 4 commentaires

nvm, n'a pas lu les documents assez près.

il y a encore un autre paramètre de rappel, j'ai fini par tout envelopper dans une promesse que je peux attendre

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)

Remarque, si vous utilisez la version préliminaire de v3 , vous n'avez pas besoin du wrapper. eachLimit renverra une promesse si vous ne passez pas le rappel final.

hmm, j'ai essayé d'attendre async.eachLimit mais cela ne fonctionnait pas pour une raison ou une autre. C'est ce qui m'a poussé à poster ici. Je vais devoir lui donner un autre coup.

Avez-vous réussi? Je suis confronté au même - il n'attend tout simplement pas que toutes les promesses de l'itération se terminent.

Cette page vous a été utile?
0 / 5 - 0 notes