在本教程中,您将了解 Promise.allSettled() 静态方法。

Promise.allSettled() 方法介绍

ES2020 引入接受 Promise.allSettled() 方法,该方法接受一个 promises 列表参数并返回一个新的 Promise,新的 promise 会等待 promises 列表参数的所有 Promise 解决或者拒绝。

下面展示 Promise.allSettled() 静态方法的语法:

Promise.allSettled(iterable);

iterable 是包含 Promise 的可迭代的对象 。Promise.allSettled() 返回一个挂起的 Promise。该 Promise 解决后返回一个对象数组,每个对象都描述 Promise 列表的结果。

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

  • status 可以是 fulfilledrejected
  • value 是,promise 被解决返回的值或者是被拒绝的 reason

下图说明 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);
    });

输出:

怎么运行的:

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

结论

Promise.allSettled() 方法接受一个可迭代的 promise 并返回一个新的 promise,当每个输入的 promise 都被解决或者拒绝时,Promise.allSettled() 将会返回可描述每个 promise的值或者拒绝原因。