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 в песочнице этого сайта не выполняется. Перенесите пример в отдельный учебный файл. Сначала проверьте исходный результат, затем измените входные данные; ошибка проверки означает, что результат отличается от ожидаемого.