← Назад ко всем вопросам

Что делает 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}`);
      }
    });
  });

Объяснение кода

  1. Создание промисов:

    • promise1 и promise3 — промисы, которые успешно выполняются с результатами 10 и 20 соответственно.
    • promise2 — промис, который отклоняется с причиной 'Ошибка'.
  2. Promise.allSettled:

    • Promise.allSettled([promise1, promise2, promise3]) создает новый промис, который разрешается, когда все три промиса завершены.
  3. Обработка результатов:

    • Метод .then() вызывается, когда все промисы завершены.
    • results — массив объектов, каждый из которых имеет свойства status и либо value, либо reason.
    • results.forEach((result) => {...}) — перебирает каждый объект в массиве results.
      • Если result.status равен 'fulfilled', выводится сообщение о успешном завершении с result.value.
      • Если result.status равен 'rejected', выводится сообщение об отклонении с result.reason.

Где применяется

Promise.allSettled() полезен в ситуациях, когда нужно дождаться завершения всех асинхронных операций, но не важно, были ли они успешными. Это может быть полезно в сценариях, где важна информация о каждом промисе, независимо от его состояния, например, при сборе данных из нескольких источников или при выполнении нескольких независимых задач.

Тема: JavaScript
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки