Что такое 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, реагирует и на первую ошибку.