Async ждут одного из многих - PullRequest
0 голосов
/ 15 января 2019

Есть ли способ выполнить асинхронное ожидание в группе обещаний, но только в ожидании первого завершения?

Например:

async function run() {
    const ms = Math.floor(Math.random() * 1000);
    return new Promise(resolve => setTimeout(resolve, ms));
}

async function test() {
    await Promise.first([run(), run(), run(), run(), run()]); // first or similar?

    // this line would be reached after the first run() finished execution
    // receieve results from first completion
}

1 Ответ

0 голосов
/ 15 января 2019

Вы можете использовать Promise.race.

var promise1 = new Promise(function(resolve, reject) {
    setTimeout(resolve, 500, 'one');
});

var promise2 = new Promise(function(resolve, reject) {
    setTimeout(resolve, 100, 'two');
});

Promise.race([promise1, promise2]).then(function(value) {
  console.log(value);
  // Both resolve, but promise2 is faster
});
// expected output: "two"

Подробнее: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/race

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...