> В чем разница Promise.all и Promise.allSettled в JavaScript и что происходит если один промис падает (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Cyber Interactive, Kodix
Стек: JavaScript
> Пример ответа
Основное различие между Promise.all и Promise.allSettled в том, как они обрабатывают отклонённые промисы.
Promise.all - завершается сразу, как только любой из переданных промисов отклоняется (rejected). В этом случае весь Promise.all переходит в состояние rejected с ошибкой первого упавшего промиса. Остальные промисы продолжают выполняться, но их результаты игнорируются.
Пример:
JAVASCRIPTconst 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.
Пример:
JAVASCRIPTPromise.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- когда нужно выполнить несколько независимых операций и получить все результаты, даже если некоторые упали (например, загрузка нескольких виджетов, где каждый может работать отдельно).
> Похожие задачи по frontend
Для чего нужны и как работают методы массивов map, filter и reduce в JavaScript
Что такое map, filter и reduce в JavaScript и в чем их отличие
Почему setTimeout выполняется после микрозадач в JavaScript
Как работать с Promise в цепочках
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью