Как ждать разрешения обещаний вместо использования Promise.all? - PullRequest
0 голосов
/ 22 сентября 2019

У меня есть ситуация, когда я зацикливаюсь на некоторых данных, и мне нужно выполнить асинхронную операцию для каждого элемента массива.Я не хочу ждать результата в цикле.Вместо этого я хочу просто начать выполнение обещаний из цикла.После завершения цикла я хочу подождать, пока все обещания не будут разрешены, и затем вернуть некоторый результат.

Код ниже:

const t1 = delay => new Promise(resolve => {
  setTimeout(() => {
    console.log('from t1')
    resolve()
  }, delay)
})


const promises = []
const results = []
const array = [1 ,2]
array.forEach((element, index) => {
  const temp = t1((index + 1) * 1000).then(() => results.push(5))
  promises.push(temp)
})

const mainFunc = async () => {
  const bigPromise = () => new Promise(resolve => {
    if (results.length === 2) {
      resolve()
    }
  })

  await bigPromise()
  console.log(results)
}

mainFunc()

Я думал, что смогу создать еще одно обещание bigPromise, котороепроверит, равна ли длина массива 2.Таким образом, я буду знать, что все обещания выполнены.Однако это не работает.Как я могу ждать какого-то уведомления в Javascript?Я не хотел бы использовать setInterval для этой проблемы.

...