Дмитрий Нечаев
Метод Promise.allSettled() в JavaScript
В современном программировании на JavaScript, особенно в асинхронном коде, часто возникает необходимость выполнять несколько операций параллельно. Для этого идеально подходит метод Promise.allSettled()
. Этот метод позволяет запускать несколько промисов одновременно и ждать их всех завершения, независимо от того, были ли они выполнены успешно или завершились с ошибкой.
Что такое Promise.allSettled()
?
Promise.allSettled()
— это статический метод Promise, который принимает массив промисов и возвращает промис, который разрешается после того, как все переданные промисы завершились (разрешены или отклонены). Результатом этого промиса является массив объектов, каждый из которых представляет результат выполнения каждого из промисов.
Метод Promise.allSettled()
позволяет дождаться завершения всех промисов в наборе, независимо от того, успешно они выполнены или отклонены. Это полезно, когда необходимо получить результаты всех асинхронных операций, даже если некоторые из них завершились с ошибкой. Для эффективного использования Promise.allSettled()
необходимо хорошо понимать принципы работы с Promise
, обработку ошибок и асинхронный JavaScript. Если вы хотите детальнее погрузиться в JavaScript — приходите на наш большой курс JavaScript Advanced. На курсе 196 уроков и 18 упражнений, AI-тренажеры для безлимитной практики с кодом и задачами 24/7, решение задач с живым ревью наставника, еженедельные встречи с менторами.
Как работает Promise.allSettled()
?
Каждый объект в возвращаемом массиве имеет два свойства:
status
: строка, которая указывает, был ли промис выполнен ("fulfilled"
) или отклонен ("rejected"
).value
илиreason
: значение, с которым промис был выполнен, или причина, по которой он был отклонен.
Пример использования
Допустим, у нас есть несколько асинхронных операций, которые возвращают промисы. Мы хотим запустить их параллельно и обработать результаты, как только все они завершатся.
const promise1 = Promise.resolve(3);
const promise2 = new Promise((resolve, reject) => setTimeout(reject, 100, 'ошибка'));
const promise3 = new Promise((resolve, reject) => setTimeout(resolve, 100, 'успешно'));
Promise.allSettled([promise1, promise2, promise3])
.then((results) => {
results.forEach((result) => {
console.log(result.status); // Выведет "fulfilled", "rejected", "fulfilled"
});
});
Преимущества использования Promise.allSettled()
- Универсальность: Этот метод позволяет удобно обрабатывать ситуации, когда нам необходимо выполнить несколько асинхронных операций и нам важен результат каждой из них, даже если некоторые завершатся с ошибкой.
- Надежность: Мы получаем результаты всех промисов, что позволяет строить более надежную логику в обработке ошибок.
Недостатки
Основной недостаток использования Promise.allSettled()
заключается в том, что придется ждать завершения всех промисов, даже если некоторые из них будут выполняться значительно дольше других.
Заключение
Promise.allSettled()
является мощным инструментом в арсенале разработчика JavaScript для управления множественными асинхронными операциями. Он обеспечивает более гибкий подход к обработке ошибок и успешных результатов, чем другие аналогичные методы, такие как Promise.all()
, которые требуют успешного выполнения всех промисов.
Чтобы полностью раскрыть потенциал этого и других продвинутых методов работы с Promise
, необходимо глубокое понимание асинхронного JavaScript. Этому посвящен курс JavaScript Advanced. В первых 3 модулях уже доступно бесплатное содержание — начните погружаться в мир продвинутого JavaScript прямо сегодня.
Постройте личный план изучения Javascript до уровня Middle — бесплатно!
Javascript — часть карты развития Frontend
100+ шагов развития
30 бесплатных лекций
300 бонусных рублей на счет
Бесплатные лекции
Все гайды по Javascript
Лучшие курсы по теме

Основы JavaScript
Антон Ларичев
TypeScript с нуля
Антон Ларичев