> В чем разница Promise.all и Promise.allSettled в JavaScript и что происходит если один промис падает (JavaScript)

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

Компании: Cyber Interactive, Kodix

Стек: JavaScript

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

Основное различие между Promise.all и Promise.allSettled в том, как они обрабатывают отклонённые промисы.

Promise.all - завершается сразу, как только любой из переданных промисов отклоняется (rejected). В этом случае весь Promise.all переходит в состояние rejected с ошибкой первого упавшего промиса. Остальные промисы продолжают выполняться, но их результаты игнорируются.

Пример:

JAVASCRIPT
const p1 = Promise.resolve(1);
const p2 = Promise.reject('Ошибка');
const p3 = Promise.resolve(3);
Promise.all([p1, p2, p3])
.then(results => console.log(results)) // не выполнится
.catch(err => console.log(err)); // 'Ошибка'

Promise.allSettled — ждёт завершения всех промисов, независимо от того, resolved или rejected. Возвращает массив объектов с полями status ("fulfilled" или "rejected") и либо value, либо reason.

Пример:

JAVASCRIPT
Promise.allSettled([p1, p2, p3])
.then(results => console.log(results));
// [
// { status: 'fulfilled', value: 1 },
// { status: 'rejected', reason: 'Ошибка' },
// { status: 'fulfilled', value: 3 }
// ]

Что происходит, если один промис падает:

  • В Promise.all - весь промис немедленно отклоняется, остальные результаты теряются.

  • В Promise.allSettled - выполнение продолжается, все результаты (включая ошибку) собираются в итоговый массив.

Когда что использовать:

  • Promise.all - когда нужен атомарный успех всех операций (например, загрузка данных для страницы, где отсутствие любого элемента критично).

  • Promise.allSettled - когда нужно выполнить несколько независимых операций и получить все результаты, даже если некоторые упали (например, загрузка нескольких виджетов, где каждый может работать отдельно).

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

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