JavaScript Promise.allSettled()

摘要: 在本教程中,您将学习关于 Promise.allSettled() 方法以组合 promise。

Promise.allSettled() 方法简介

ES2020 引入了 Promise.allSettled() 方法,它接受一个 Promise 列表,并返回一个新 promise,该 promise 在所有输入 promise 结算后解析,无论是已解析还是已拒绝。

以下是 Promise.allSettled() 方法的语法

Promise.allSettled(iterable);Code language: JavaScript (javascript)

iterable 包含 promise。Promise.allSettled() 返回一个挂起的 promise,一旦每个输入 promise 结算,它将被异步履行。

Promise.allSettled() 方法返回一个 promise,该 promise 解析为一个 数组,其中包含 对象,每个对象描述输入 promise 的结果。

每个对象都有两个属性:statusvalue(或 reason)。

  • status 可以是 fulfilledrejected
  • value 如果 promise 已履行,或 reason) 如果 promise 已拒绝。

下图说明了 Promise.allSettled() 方法的工作原理

JavaScript Promise.allSettled

在本图中

  • promise1t1 时拒绝到 error
  • promise2t2 时解析为 value
  • Promise.allSettled() 方法解析为一个数组,其中包含描述 promise1promise2 状态和结果的对象。

JavaScript Promise.allSettled() 示例

以下示例使用 Promise.allSettled() 来等待所有输入 promise 结算

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);
    });
Code language: JavaScript (javascript)

输出

工作原理

  • 第一个 promise p1 在一秒后解析为值 10
  • 第二个 promise p2 在两秒后因原因拒绝,其值为 20
  • Promise.allSettled() 返回一个 promise,该 promise 解析为 result 数组,该数组有两个元素。第一个元素是 p1 promise 解析的对象,第二个元素是另一个对象,该对象被 p2 promise 拒绝。

总结

  • Promise.allSettled() 方法接受可迭代的 promise,并返回一个新 promise,该 promise 在每个输入 promise 结算后解析,并返回一个对象数组,描述可迭代对象中每个 promise 的结果。
本教程是否有帮助?