Что делает Promise.allSettled()
1️⃣ Как кратко ответить
Promise.allSettled() принимает массив промисов и возвращает новый промис, который разрешается, когда все переданные промисы завершены, независимо от их состояния (выполнены или отклонены). Результат — массив объектов, каждый из которых содержит состояние и значение или причину отклонения соответствующего промиса.
2️⃣ Подробное объяснение темы
Promise.allSettled() — это метод, который позволяет работать с набором промисов, не дожидаясь их успешного выполнения. Он полезен, когда нужно знать, что все промисы завершены, но не важно, были ли они выполнены успешно или отклонены.
Зачем это нужно
В реальных приложениях часто требуется выполнить несколько асинхронных операций параллельно и дождаться их завершения, чтобы продолжить выполнение программы. Однако не всегда важно, чтобы все операции завершились успешно. Например, при загрузке данных с нескольких API, если одно из них не отвечает, мы все равно можем использовать данные из других источников.
Как это работает
Promise.allSettled() принимает массив промисов и возвращает новый промис. Этот промис разрешается, когда все промисы в массиве завершены. Результат — массив объектов, каждый из которых описывает состояние соответствующего промиса.
Пример кода
const promise1 = Promise.resolve(10);
const promise2 = Promise.reject('Ошибка');
const promise3 = Promise.resolve(20);
Promise.allSettled([promise1, promise2, promise3])
.then((results) => {
results.forEach((result) => {
if (result.status === 'fulfilled') {
console.log(`Завершено успешно: ${result.value}`);
} else {
console.log(`Отклонено: ${result.reason}`);
}
});
});
Объяснение кода
-
Создание промисов:
promise1иpromise3— промисы, которые успешно выполняются с результатами10и20соответственно.promise2— промис, который отклоняется с причиной'Ошибка'.
-
Promise.allSettled:
Promise.allSettled([promise1, promise2, promise3])создает новый промис, который разрешается, когда все три промиса завершены.
-
Обработка результатов:
- Метод
.then()вызывается, когда все промисы завершены. results— массив объектов, каждый из которых имеет свойстваstatusи либоvalue, либоreason.results.forEach((result) => {...})— перебирает каждый объект в массивеresults.- Если
result.statusравен'fulfilled', выводится сообщение о успешном завершении сresult.value. - Если
result.statusравен'rejected', выводится сообщение об отклонении сresult.reason.
- Если
- Метод
Где применяется
Promise.allSettled() полезен в ситуациях, когда нужно дождаться завершения всех асинхронных операций, но не важно, были ли они успешными. Это может быть полезно в сценариях, где важна информация о каждом промисе, независимо от его состояния, например, при сборе данных из нескольких источников или при выполнении нескольких независимых задач.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться