> Как определить момент завершения всех промисов с ошибками для вызова reject в JavaScript? (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Яндекс
Стек: JavaScript
> Пример ответа
Для обработки всех промисов с учётом ошибок используйте Promise.allSettled(). Он возвращает массив объектов с полями status ("fulfilled" или "rejected") и соответствующим value или reason. Если нужно вызвать reject после завершения всех промисов (например, при наличии хотя бы одной ошибки), можно сделать так:
JAVASCRIPTasync function handleAllPromises(promises) {const results = await Promise.allSettled(promises);const errors = results.filter(result => result.status === 'rejected').map(result => result.reason);if (errors.length > 0) {return Promise.reject(new AggregateError(errors, 'Некоторые промисы завершились ошибкой'));}return results.filter(result => result.status === 'fulfilled').map(result => result.value);}// Использование:const promises = [Promise.resolve(1), Promise.reject('Ошибка'), Promise.resolve(3)];handleAllPromises(promises).then(values => console.log('Успех:', values)).catch(error => console.error('Ошибка:', error.message, error.errors));
AggregateError (доступен в современном JS) собирает все ошибки в один объект. Если нужно поддерживать старые окружения, можно вернуть массив ошибок или создать кастомную ошибку. Альтернатива - Promise.all() не подходит, так как он сразу переходит в reject при первой ошибке, не дожидаясь остальных.
> Похожие задачи по frontend
Как обработать успешное разрешение одного из промисов в функции any?
В каком порядке выполняются промисы и их обработчики then/catch в JavaScript и как это влияет на порядок ошибок?
Почему нельзя просто вернуть Promise.resolve с промисом внутри в реализации any?
Как повесить обработчик на резолв каждого промиса в массиве для реализации any?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью