> В чем разница между 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 берёт первого успешного (игнорируя ошибки до первого успеха).
> Похожие задачи по frontend
Как реализовать функцию any, которая работает как Promise.any?
Почему стрелочную функцию нельзя использовать как конструктор в JavaScript
Каков порядок выполнения задач (task) и микротасков (microtask) в JavaScript
Можно ли изменять массивы и объекты, объявленные через const в JavaScript?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью