> Как повесить обработчик на резолв каждого промиса в массиве для реализации any? (JavaScript)

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

Компании: Яндекс

Стек: JavaScript

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

Для реализации Promise.any можно повесить обработчик на каждый промис через .then(), отслеживая первый успешный резолв. Вот пример:

JAVASCRIPT
function 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.

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

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