> Как повесить обработчик на резолв каждого промиса в массиве для реализации any? (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Яндекс
Стек: JavaScript
> Пример ответа
Для реализации Promise.any можно повесить обработчик на каждый промис через .then(), отслеживая первый успешный резолв. Вот пример:
JAVASCRIPTfunction promiseAny(promises) {return new Promise((resolve, reject) => {if (promises.length === 0) {reject(new AggregateError([], 'All promises were rejected'));return;}let rejectedCount = 0;const errors = [];promises.forEach((promise, index) => {Promise.resolve(promise).then(value => {resolve(value); // Первый успешный резолв завершает весь промис}).catch(error => {errors[index] = error;rejectedCount++;if (rejectedCount === promises.length) {reject(new AggregateError(errors, 'All promises were rejected'));}});});});}
Здесь .then() вешается на каждый промис - при первом же успешном резолве вызывается resolve внешнего промиса, что и реализует логику any. Обработчик ошибок собирает все rejection'ы и, если все промисы отклонены, выбрасывает AggregateError.
> Похожие задачи по frontend
Как определить момент завершения всех промисов с ошибками для вызова reject в JavaScript?
Почему нельзя просто вернуть Promise.resolve с промисом внутри в реализации any?
Что произойдет при прямой мутации состояния в редьюсере Redux
Что такое проваливание промисов (Promise rejection) в JavaScript
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью