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 в песочнице этого сайта не выполняется. Перенесите пример в отдельный учебный файл. Сначала проверьте исходный результат, затем измените входные данные; ошибка проверки означает, что результат отличается от ожидаемого.