Promise.allSettled是Promise对象的一个静态方法
参数是一个可迭代对象,一般是一个Promise数组
该Promise.allSettled()
方法返回一个Promise对象,当所有给定的 promise对象都已经fulfilled或rejected后,返回的Promise对象能拿到一个对象数组,每个对象表示对应的 promise 结果数据以及状态。
当您有多个彼此不依赖的异步任务成功完成时,或者您总是想知道每个promise的结果时,通常使用它。
const pro = new Promise((resolve, reject) => {
setTimeout(() => {
reject(3);
}, 1000);
});
Promise.allSettled([pro, Promise.resolve(1), Promise.reject(2)]).then(
(data) => {
console.log(data);
}
);
打印结果
[
{ status: 'rejected', reason: 3 },
{ status: 'fulfilled', value: 1 },
{ status: 'rejected', reason: 2 }
]
手写Promise.allSettled
代码
Promise.myAllSettled = function (proms) {
return new Promise((resolve, reject) => {
let resolvedCount = 0;
let count = 0;
const results = [];
for (const prom of proms) {
let i = count;
count++;
Promise.resolve(prom)
.then(
(data) => {
resolvedCount++;
results[i] = {
status: "fullfilled",
value: data,
};
},
(reason) => {
resolvedCount++;
results[i] = {
status: "rejected",
reason,
};
}
)
.finally(() => {
if (resolvedCount >= count) {
resolve(results);
}
});
}
});
};
const pro = new Promise((resolve, reject) => {
setTimeout(() => {
reject(3);
}, 1000);
});
Promise.allSettled([pro, Promise.resolve(1), Promise.reject(2)]).then(
(data) => {
console.log(data);
}
);
Promise.myAllSettled([pro, Promise.resolve(1), Promise.reject(2)]).then(
(data) => {
console.log(data);
}
);
我的github有更多的前端手写代码。