📅  最后修改于: 2023-12-03 15:16:08.156000             🧑  作者: Mango
Promise.allSettled()
方法用于将多个 Promise 实例包装成一个新的 Promise 实例,并在所有的 Promise 实例状态发生改变后,返回一个数组。这个数组包含每个 Promise 实例的状态(fulfilled/rejected)和结果值(如果有)。
Promise.allSettled(iterable)
iterable
:一个可迭代对象,如 Array。
返回一个 Promise 实例,该实例将等待传入的所有 Promise 实例都完成。完成后,返回一个包含所有 Promise 实例曾经状态和结果的数组。如果无法全部处理,则返回拒绝的 Promise。
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Promise 1 resolved');
}, 1000);
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(() => {
reject('Promise 2 rejected');
}, 2000);
});
const promise3 = new Promise((resolve, reject) => {
setTimeout(() => {
reject('Promise 3 rejected');
}, 500);
});
// promise4 没有调用resolve或reject,即不会返回结果
const promise4 = new Promise((resolve, reject) => {
setTimeout(() => {}, 3000);
});
Promise.allSettled([promise1, promise2, promise3, promise4])
.then((results) => console.log(results));
// 输出:
// [
// { status: 'fulfilled', value: 'Promise 1 resolved' },
// { status: 'rejected', reason: 'Promise 2 rejected' },
// { status: 'rejected', reason: 'Promise 3 rejected' },
// { status: 'fulfilled', value: undefined }
// ]
Promise.allSettled()
方法可以用于以一次性检查多个异步操作的结果。与Promise.all()
不同,Promise.allSettled()
并不会在某个 Promise 实例被拒绝时终止,而是会等待所有 Promise 实例都处理完毕再返回结果数组。如果某个 Promise 实例无法处理,则返回拒绝的 Promise。