Назад к вопросам
Junior
105
questionbank

Расскажи о том, что такое Promise.race?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Promise.race — это метод, который возвращает новый промис. Этот новый промис разрешается или отклоняется с тем же значением (или причиной), что и первый промис из переданного итерируемого объекта (обычно массива), который завершился.

Принципы работы:

  1. Вход: Принимает итерируемый объект (например, массив) промисов.
  2. Ожидание: Начинает "состязание" между всеми промисами.
  3. Результат: Как только любой из промисов в итерируемом объекте завершается (либо разрешается, либо отклоняется), Promise.race мгновенно завершается с тем же результатом.
  4. Игнорирование: Результаты всех других промисов, завершившихся позже, полностью игнорируются.

Пример использования:

// Пример промиса, который разрешается через 1 секунду
const promise1 = new Promise((resolve) => setTimeout(() => resolve('Первый'), 1000));

// Пример промиса, который разрешается через 500 миллисекунд
const promise2 = new Promise((resolve) => setTimeout(() => resolve('Второй'), 500));

// Пример промиса, который отклоняется через 300 миллисекунд
const promise3 = new Promise((_, reject) => setTimeout(() => reject(new Error('Ошибка')), 300));

Promise.race([promise1, promise2, promise3])
  .then((value) => {
    console.log(value); // Выведет 'Ошибка'
  })
  .catch((error) => {
    console.error(error.message); // Обработает ошибку 'Ошибка'
  });

В этом примере promise3 завершается первым (отклоняется), поэтому Promise.race завершится с ошибкой, и выполнится блок .catch. Если бы promise2 завершился первым (например, за 10ms), то Promise.race разрешился бы со значением 'Второй', и выполнился бы блок .then.

Типичные сценарии использования:

  • Реализация таймаута для асинхронной операции.
  • Получение результата из самого быстрого источника данных среди нескольких возможных.
  • Отмена конкурирующих асинхронных операций.