Завершите Promise.race только тогда, когда он успешен - PullRequest
1 голос
/ 03 ноября 2019

У меня есть три асинхронные функции, которые возвращают объект. Если одна из функций не удалась, они возвращают пустой объект. Проблема в том, что если я попытаюсь Promise.race этих функций, одна из неуспешных функций может завершиться первой и вернуть пустой объект. Мой код Promise выглядит следующим образом:

let product = await Promise.race([
        get_info_1(code),
        get_info_2(code),
        get_info_3(code)
    ])

Можно ли остановить выполнение одной из асинхронных функций get_info без остановки Promise.race? Или я могу как-то сказать Promise.race подождать, пока возвращаемый объект не будет содержать какую-либо информацию?

1 Ответ

1 голос
/ 03 ноября 2019

Вы можете сделать отклонение Promise никогда не завершенным

const never_resolve = new Promise(() => {}) 
{
  (async function() {
    let product = await Promise.race([
      Promise.reject(1).catch(_ => never_resolve),
      Promise.resolve(2).catch(_ => never_resolve),
      Promise.reject(3).catch(_ => never_resolve)
    ])
    console.log(product)
  })()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...