Вебсправочник
Справочник JavaScript

Promise.allSettled(): результаты успехов и ошибок вместе

Promise.allSettled ожидает завершения всех переданных обещаний и описывает исход каждого элемента.

Назначение

Promise.allSettled ожидает завершения всех переданных обещаний и описывает исход каждого элемента.

Как это работает

У успешного исхода status равен fulfilled и есть value, у ошибки status равен rejected и есть reason. Порядок записей соответствует входу. Отклонение отдельного обещания не отвергает итог по этой причине.

Пример

Promise.allSettled([Promise.resolve(2),Promise.reject("demo")]).then(results=>{
console.assert(results[0].status==="fulfilled");
console.assert(results[0].value===2);
console.assert(results[1].status==="rejected");
console.assert(results[1].reason==="demo");
});

Что должно получиться

Первый исход хранит число, второй — причину отказа. Итоговая коллекция позволяет отдельно показать успешные элементы и ошибки, сохраняя связь с исходным списком.

Граница применения и частая ошибка

Не обращайтесь к value у каждого исхода без проверки status. И не скрывайте частичный провал за общей надписью «всё готово», если часть обязательных действий не выполнилась.

Самостоятельная проверка

Смешайте два успеха и одну ошибку. Разделите исходы по status и сформулируйте сообщение, которое честно описывает частично выполненную работу.

JavaScript в песочнице этого сайта не выполняется. Перенесите пример в отдельный учебный файл. Сначала проверьте исходный результат, затем измените входные данные; ошибка проверки означает, что результат отличается от ожидаемого.

Самостоятельный учебный материал. Техническая документация: первоисточник по теме ↗. Если результат отличается, проверьте код и версию браузера.