В этом руководстве вы узнаете о методеPromise.allSettled()
в JavaScript для создания промисов.
В ES2020 появился метод Promise.allSettled()
, который принимает список промисов и возвращает новое обещание, которое разрешается после того, как все входные обещания будут выполнены, разрешены или отклонены.
Синтаксис:
Promise.allSettled(iterable);
iterable
содержит обещания. Promise.allSettled()
возвращает ожидающее обещание, которое будет асинхронно выполнено после того, как будет установлено каждое входное обещание.
Метод Promise.allSettled()
возвращает обещание, которое преобразуется в массив объектов, каждый из которых описывает результат введенного промиса.
У каждого объекта есть два свойства: status
и value
(или reason
).
status
может быть какfulfilled
, так иrejected
.value
, если обещание выполнено, илиreason
, если отклонено.
На следующей диаграмме показано, как работает метод 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()
принимает итерацию промисов и возвращает новое обещание, которое разрешается, когда каждое входное обещание урегулировано с массивом объектов, который описывает результат каждого промиса в итерируемом объекте.