> Как обрабатывать случаи отклонения одного из промисов в Promise.all в JavaScript? (JavaScript)

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

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

Стек: JavaScript

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

Promise.all отклоняет весь массив результатов, как только любой из переданных промисов завершается с ошибкой. Чтобы обработать это, можно:

  1. Использовать .catch для каждого промиса - превратить отклонение в успешное разрешение с маркером ошибки:
JAVASCRIPT
const 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: ... }
  1. Применить Promise.allSettled (ES2020) - он ждёт завершения всех промисов и возвращает массив объектов с полями status ('fulfilled' или 'rejected') и value/reason:
JAVASCRIPT
const results = await Promise.allSettled([
fetch('/api/1'),
fetch('/api/2'),
fetch('/api/3')
]);
// Обрабатываем каждый результат отдельно
results.forEach(result => {
if (result.status === 'fulfilled') {
// успех
} else {
// ошибка
}
});
  1. Комбинировать с Promise.all и индивидуальной обработкой - если нужно сохранить порядок и получить все данные, но не прерывать выполнение при ошибке.

Выбор зависит от задачи: Promise.allSettled предпочтительнее, когда нужно получить все результаты независимо от ошибок.

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

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