> В чем разница между Promise.all и Promise.allSettled в JavaScript? (JavaScript)

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

Компании: Альфа-банк, Инрэко, ООО Премиум ИТ Солюшен

Стек: JavaScript

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

Основное различие между Promise.all и Promise.allSettled - в поведении при отклонении одного из промисов.

  • Promise.all завершается с ошибкой сразу, как только любой из переданных промисов отклоняется (rejected). Результатом будет ошибка первого отклонённого промиса, а остальные промисы игнорируются (даже если они ещё не завершились). Используется, когда все промисы критически важны для итогового результата.

  • Promise.allSettled дожидается завершения всех промисов независимо от их статуса. Возвращает массив объектов с полями status ("fulfilled" или "rejected") и value/reason. Подходит, когда нужно получить результаты всех операций, даже если некоторые завершились ошибкой (например, загрузка нескольких независимых ресурсов).

Пример:

JAVASCRIPT
const promises = [
Promise.resolve(1),
Promise.reject('Ошибка'),
Promise.resolve(3),
];
// Promise.all - упадёт сразу с 'Ошибка'
Promise.all(promises).catch(err => console.log(err)); // 'Ошибка'
// Promise.allSettled - дождётся всех
Promise.allSettled(promises).then(results => {
console.log(results);
// [
// { status: 'fulfilled', value: 1 },
// { status: 'rejected', reason: 'Ошибка' },
// { status: 'fulfilled', value: 3 }
// ]
});

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

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