pregunta: poco nuevo en async y tiene el siguiente código para descargar muchos archivos, 2 aproximadamente al mismo tiempo
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")
Por supuesto, "completado" se activa rápidamente mientras async.eachLimit continúa ejecutando funciones.
¿Cuál es una buena forma de esperar a que se realicen todas las iteraciones?
nvm, no leyó los documentos lo suficientemente cerca.
hay otro parámetro de devolución de llamada, terminó envolviéndolo todo en una promesa de que puedo 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 al margen, si está utilizando la versión preliminar de v3
, no necesita el contenedor. eachLimit
devolverá una promesa si no pasa la devolución de llamada final.
hmm, intenté esperar async.eachLimit pero no funcionaba por alguna razón u otra. Eso es lo que me impulsó a publicar aquí. Tendré que darle otra oportunidad.
¿Tuviste éxito? Me enfrento a lo mismo: simplemente no espera a que finalicen todas las promesas de iteraciones.