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 ?
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.