> Как обрабатывать случаи отклонения одного из промисов в Promise.all в JavaScript? (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: EPAM, Яндекс
Стек: JavaScript
> Пример ответа
Promise.all отклоняет весь массив результатов, как только любой из переданных промисов завершается с ошибкой. Чтобы обработать это, можно:
- Использовать
.catchдля каждого промиса - превратить отклонение в успешное разрешение с маркером ошибки:
JAVASCRIPTconst promises = [fetch('/api/1').catch(err => ({ error: err })),fetch('/api/2').catch(err => ({ error: err })),fetch('/api/3').catch(err => ({ error: err }))];const results = await Promise.all(promises);// results - массив, где каждый элемент либо данные, либо { error: ... }
- Применить
Promise.allSettled(ES2020) - он ждёт завершения всех промисов и возвращает массив объектов с полямиstatus('fulfilled' или 'rejected') иvalue/reason:
JAVASCRIPTconst results = await Promise.allSettled([fetch('/api/1'),fetch('/api/2'),fetch('/api/3')]);// Обрабатываем каждый результат отдельноresults.forEach(result => {if (result.status === 'fulfilled') {// успех} else {// ошибка}});
- Комбинировать с
Promise.allи индивидуальной обработкой - если нужно сохранить порядок и получить все данные, но не прерывать выполнение при ошибке.
Выбор зависит от задачи: Promise.allSettled предпочтительнее, когда нужно получить все результаты независимо от ошибок.
> Похожие задачи по frontend
Как реализовать функцию add в JavaScript, которая накапливает аргументы и возвращает сумму при вызове без аргументов
В чем разница package-lock.json и package.json
Как реализовать глубокое клонирование объекта в JavaScript?
Что происходит при запуске функции с промисами и почему результат может быть пустым?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью