Прежде чем продолжить, дождитесь asyn c .each до fini sh через ожидание - PullRequest
0 голосов
/ 01 мая 2020

Я пытаюсь дождаться завершения asyn c .eachLimit, прежде чем продолжить.

Мой код:

await async.eachLimit(myList, async (item)=>{
  await processItem(item)
})

console.log("all done");

, но я всегда получаю "все сделано", прежде чем все будет обработанный. Что я не так делаю?

Ответы [ 3 ]

0 голосов
/ 01 мая 2020

Возможно, вы сможете адаптировать это к вашим потребностям (вместо 1000 использовался Math.random .. для ускорения выполнения примера).

const test = async () => {

  const list = [ 1, 2, 3 ]

  const testFunc = async (item) => {
    return new Promise( ( res, rej ) => {
      setTimeout( () => {
        console.log(item)
        res( true )
      }, 1000)
    } )
  }

  await Promise.all( list.map( async ( item ) => {
    await testFunc( item )
  } ) )

  console.log("all done")
}

test()
0 голосов
/ 01 мая 2020

В итоге я решил это так:

await new Promise( (resolve, reject)=>{
  async.eachLimit(myList, async (item)=>{
    await processItem(item)
  }, (err)=> {
  if(err) reject(err)
  else resolve()
})

Проблема заключалась в том, что по какой-то причине asyn c .eachLimit не возвращал ожидаемое обещание.

0 голосов
/ 01 мая 2020

Вы можете попробовать Promise.all(), который возвращает обещание, которое разрешается только после разрешения всех обещаний в списке.

await Promise.all(myList);
console.log("done");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...