Async: каков хороший шаблон, чтобы дождаться завершения всех итераций async.eachLimit, прежде чем двигаться дальше?

Созданный на 17 апр. 2019  ·  4Комментарии  ·  Источник: caolan/async

вопрос: немного новичок в 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 продолжает выполнять функции.

Как лучше дождаться завершения всех итераций?

question

Все 4 Комментарий

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, но по какой-то причине он не работал. Это то, что побудило меня написать здесь. Придется сделать еще один шанс.

Тебе удалось? Я сталкиваюсь с тем же - он просто не ждет завершения всех итераций.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги