今天我们来总结一下怎么使用 Promise.allSettled() 方法,并尝试手动封装它来解决一定的兼容性问题。
如何使用
Promise.allSettled() 方法与 Promise.all() 类似,它也接收一系列的 promise 实例,但是这个方法不会失败,而且特别的是他会把得到的结果放在一个数组中。
Promise.allSettled([Promise.reject(1), Promise.resolve(2), Promise.reject(3)])
.then((values)=>{
console.log(values)
})
//[{status: "rejected", reason: 1},
{status: "fulfilled", reason: 2},
{status: "rejected", reason: 3}]
手动封装
为了解决其兼容性问题,我们可以手动封装这个方法:
const helper = (promiseList)=>{
return promiseList.map((promise)=>{
return promise
.then(
(result)=>{return {status: "fulfilled", result: result}},
(reason)=>{return {status: "rejected", result: reason}}
)
})
}
myAllSettled = (promiseList)=>{
return Promise.all(helper(promiseList));
}