Вебсправочник
Справочник JavaScript

Promise.race(): первый завершившийся исход

Promise.race принимает состояние первого завершившегося участника — успешное или ошибочное.

Назначение

Promise.race принимает состояние первого завершившегося участника — успешное или ошибочное.

Как это работает

Результат не означает, что остальные участники прекращены. Пустой набор оставляет общее обещание в ожидании. Даже уже завершённые входные Promise обрабатываются через механизм обещаний, а не синхронный возврат значения.

Пример

Promise.race([Promise.resolve("first"),Promise.resolve("second")]).then(value=>console.assert(value==="first"));
Promise.race([Promise.reject("error"),Promise.resolve("ok")]).catch(reason=>console.assert(reason==="error"));

Что должно получиться

Для данных уже завершённых участников первый вход задаёт итог: успех или ошибку. Внешние запросы здесь не создаются, поэтому пример не требует отмены сетевой операции.

Граница применения и частая ошибка

Тайм-аут через race не отменяет запрос автоматически. Если запрос больше не нужен, отдельно передайте и активируйте поддерживаемый сигнал отмены.

Самостоятельная проверка

Сравните группу из уже выполненных обещаний и группу с первым отклонением. Проверьте обработку ошибки и опишите, кто освобождает ресурсы проигравших операций.

JavaScript в песочнице этого сайта не выполняется. Перенесите пример в отдельный учебный файл. Сначала проверьте исходный результат, затем измените входные данные; ошибка проверки означает, что результат отличается от ожидаемого.

Самостоятельный учебный материал. Техническая документация: первоисточник по теме ↗. Если результат отличается, проверьте код и версию браузера.