Метод Promise.allSettled() в JavaScript

В этом руководстве вы узнаете о методеPromise.allSettled() в JavaScript для создания промисов.

В ES2020 появился метод Promise.allSettled(), который принимает список промисов и возвращает новое обещание, которое разрешается после того, как все входные обещания будут выполнены, разрешены или отклонены.

Синтаксис:

Promise.allSettled(iterable);

iterable содержит обещания. Promise.allSettled() возвращает ожидающее обещание, которое будет асинхронно выполнено после того, как будет установлено каждое входное обещание.

Метод Promise.allSettled() возвращает обещание, которое преобразуется в массив объектов, каждый из которых описывает результат введенного промиса.

У каждого объекта есть два свойства: status и value(или reason ).

  • status может быть как fulfilled, так и rejected.
  • value, если обещание выполнено, или reason, если отклонено.

На следующей диаграмме показано, как работает метод Promise.allSettled() :

JavaScript Promise.allSettled

На этой диаграмме:

  • promise1 отклоняется из-за error в момент времени t1.
  • promise2 разрешается в значение в t2.
  • Метод Promise.allSettled() преобразуется в массив, содержащий объекты, описывающие статусы и результаты promise1 и promise2.

Пример Promise.allSettled()

В следующем примере Promise.allSettled() используется для ожидания выполнения всех входных промисов:

const p1 = new Promise((resolve, reject) => {
    setTimeout(() => {
        console.log('The first promise has resolved');
        resolve(10);
    }, 1 * 1000);

});

const p2 = new Promise((resolve, reject) => {
    setTimeout(() => {
        console.log('The second promise has rejected');
        reject(20);
    }, 2 * 1000);
});

Promise.allSettled([p1, p2])
    .then((result) => {
        console.log(result);
    });

Выход:

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

  • Первое обещание p 1 преобразуется в значение 10 через одну секунду.
  • Второе обещание p2 отклоняется по причине со значением 20 через две секунды.
  • Promise.allSettled() возвращает обещание, которое разрешается в массив result, состоящий из двух элементов. Первый элемент — это объект, разрешенный обещанием p1, а второй — другой объект, который отклонен обещанием p2.

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

Рейтинг
( Пока оценок нет )
Александр Русаков / автор статьи
Программист, разработчик, 12 лет опыта работы в крупных компаниях. Быстро освоил typescript, делюсь своими знаниями на страницах этого сайта.
Загрузка ...
JavaScript и TypeScript