> В чем разница между Promise.all, Promise.any и Promise.race в JavaScript (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: IT-One, EPAM, Яндекс

Стек: JavaScript

> Пример ответа

Все три метода принимают итерируемый объект промисов (обычно массив) и возвращают новый промис, но ведут себя по-разному.

Promise.all завершается успешно, когда все переданные промисы разрешены. Если хотя бы один промис отклоняется, Promise.all сразу же отклоняется с ошибкой первого отклонённого промиса. Используется, когда нужны все результаты, например, для параллельной загрузки данных, необходимых для отрисовки страницы.

Promise.race завершается, когда первый из промисов завершается (любым исходом - resolve или reject). Результат или ошибка этого первого промиса передаются дальше. Применяется для установки тайм-аута: например, гонка между запросом к серверу и промисом, который отклоняется через 5 секунд.

Promise.any (добавлен в ES2021) завершается успешно, когда первый промис разрешается. Если все промисы отклоняются, то возвращается AggregateError (массив ошибок). В отличие от Promise.race, игнорирует отклонённые промисы, пока не появится хотя бы один успешный. Полезен, когда нужно получить первый успешный результат из нескольких источников (например, зеркал API).

Ключевое отличие: Promise.all ждёт всех (или падает при первой ошибке), Promise.race берёт первого финишировавшего (даже с ошибкой), а Promise.any берёт первого успешного (игнорируя ошибки до первого успеха).

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью