摘要: 在本教程中,您将学习关于 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 的结果。
每个对象都有两个属性:status 和 value(或 reason)。
status可以是fulfilled或rejected。value如果 promise 已履行,或reason) 如果 promise 已拒绝。
下图说明了 Promise.allSettled() 方法的工作原理
在本图中
promise1在t1时拒绝到error。promise2在t2时解析为value。Promise.allSettled()方法解析为一个数组,其中包含描述promise1和promise2状态和结果的对象。
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数组,该数组有两个元素。第一个元素是p1promise 解析的对象,第二个元素是另一个对象,该对象被p2promise 拒绝。
总结
Promise.allSettled()方法接受可迭代的 promise,并返回一个新 promise,该 promise 在每个输入 promise 结算后解析,并返回一个对象数组,描述可迭代对象中每个 promise 的结果。
本教程是否有帮助?