PassFront
  1. PassFront
  2. База знаний
  3. Асинхронность и Event Loop

Что такое Promise.race?

Асинхронность и Event Loop

`Promise.race` принимает массив промисов и возвращает промис, который завершается так же, как первый завершившийся из них — неважно, успехом или ошибкой.

Поведение

«Гонка»: побеждает тот, кто завершился первым. Его результат (значение или ошибка) и становится результатом race.

const result = await Promise.race([
  fetch('/fast'),
  fetch('/slow'),
]);
// результат самого быстрого запроса

Классическое применение — таймаут

function withTimeout(promise, ms) {
  const timeout = new Promise((_, reject) =>
    setTimeout(() => reject(new Error('Timeout')), ms),
  );
  return Promise.race([promise, timeout]);
}

await withTimeout(fetch('/api'), 5000);

Если запрос не успел за 5 секунд — победит промис-таймаут с ошибкой.

Отличие от Promise.any

  • race — первый завершившийся (успех или ошибка).
  • any — первый успешный; ошибки игнорируются, пока есть шанс на успех.

Нюансы

Остальные промисы не отменяются — они продолжают выполняться, просто их результат игнорируется.

Коротко для собеседования

Promise.race возвращает результат первого завершившегося промиса (успех или ошибка). Главное применение — таймауты через гонку запроса и setTimeout-reject. В отличие от any, реагирует и на первую ошибку.

Другие вопросы раздела