Короткий ответ
Promise.race(iterable) возвращает промис, который settle (resolve или reject) с результатом первого завершившегося промиса из списка. Остальные «гонку проиграли» — их итог для race уже не важен.
Типичные сценарии
Таймаут для операции
function withTimeout (promise, ms ) {
const timeout = new Promise ((_, reject ) =>
setTimeout (() => reject (new Error ("timeout" )), ms)
);
return Promise .race ([promise, timeout]);
}
await withTimeout (fetch ("/api/data" ), 3000 );
Кто ответил первым из зеркал
const data = await Promise .race ([
fetch ("https://cdn1.example/x" ),
fetch ("https://cdn2.example/x" ),
]);
Важно
Первый reject тоже выигрывает гонку — ошибка пробросится.
«Проигравшие» промисы не отменяются автоматически (как и у all).
Для «первый успешный, ошибки игнорировать, пока есть шанс» — Promise.any.
Итог: race — паттерн «кто первый settle, тот и результат»: таймауты, fallback по скорости, конкуренция источников.