> Как работает Promise.all и как реализовать аналог с обработкой reject в JavaScript (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Garage Eight, Kodix, РСХБ, IT-One, Библио-Глобус, EPAM, ЛигаСтавок
Стек: JavaScript
> Пример ответа
Promise.all принимает массив промисов (или итерируемый объект) и возвращает новый промис, который резолвится массивом результатов в том же порядке, когда все переданные промисы успешно завершатся. Если хотя бы один промис отклоняется (reject), Promise.all немедленно отклоняется с ошибкой первого отклонённого промиса, игнорируя остальные.
Для реализации аналога с обработкой reject, можно создать функцию promiseAllSettled (аналог встроенного Promise.allSettled), которая ждёт завершения всех промисов и возвращает массив объектов с полями status и value или reason. Пример:
JAVASCRIPTfunction promiseAllSettled(promises) {return new Promise((resolve) => {const results = [];let completed = 0;const total = promises.length;if (total === 0) {resolve(results);return;}promises.forEach((promise, index) => {Promise.resolve(promise).then((value) => {results[index] = { status: 'fulfilled', value };}).catch((reason) => {results[index] = { status: 'rejected', reason };}).finally(() => {completed++;if (completed === total) {resolve(results);}});});});}
Использование:
JAVASCRIPTconst p1 = Promise.resolve(1);const p2 = Promise.reject('Ошибка');const p3 = Promise.resolve(3);promiseAllSettled([p1, p2, p3]).then(console.log);// [// { status: 'fulfilled', value: 1 },// { status: 'rejected', reason: 'Ошибка' },// { status: 'fulfilled', value: 3 }// ]
Эта функция обрабатывает reject, не прерывая выполнение, и возвращает полную информацию о каждом промисе.
> Похожие задачи по frontend
Что такое лексическое окружение в JavaScript и как оно работает
Что происходит при попытке присвоить свойство примитиву в JavaScript
Что такое AbortController и метод abort в JavaScript
Какие состояния бывают у промисов и какие методы у них есть в JavaScript
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью