摘要: 在本教程中,您将学习关于 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
数组,该数组有两个元素。第一个元素是p1
promise 解析的对象,第二个元素是另一个对象,该对象被p2
promise 拒绝。
总结
Promise.allSettled()
方法接受可迭代的 promise,并返回一个新 promise,该 promise 在每个输入 promise 结算后解析,并返回一个对象数组,描述可迭代对象中每个 promise 的结果。
本教程是否有帮助?