вопрос: немного новичок в 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 продолжает выполнять функции.
Как лучше дождаться завершения всех итераций?
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, но по какой-то причине он не работал. Это то, что побудило меня написать здесь. Придется сделать еще один шанс.
Тебе удалось? Я сталкиваюсь с тем же - он просто не ждет завершения всех итераций.