promise.allSettled是ES2020新特性可以执行多个promise对象 获取多个promise对象状态 无论成功或者失败的状态
let p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(1111)
}, 1000)
})
let p2 = new Promise((resolve, reject) => {
setTimeout(() => {
reject(2222)
}, 2000)
})
Promise.allSettled([p1,p2]).then(res=>{
console.log(res);
})
执行结果
手动实现promise.allSettled方法
let p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(1111)
}, 1000)
})
let p2 = new Promise((resolve, reject) => {
setTimeout(() => {
reject(2222)
}, 2000)
})
// Promise.allSettled([p1,p2]).then(res=>{
// console.log(res);
// })
MyallSettled([p1,p2]).then(res=>{console.log(res);})
function MyallSettled(list) {
let resArr = new Array(list.length)
let num = 0
return new Promise(resolve => {
list.forEach((item, key) => {
item.then(
res => {
let obj={
status:'fulfilled',
value:res
}
resArr[key] = obj
num++
if (num === list.length) {
resolve(resArr)
}
},
err => {
let obj={
status:'rejected',
reason:err
}
resArr[key] = obj
num++
if (num === list.length) {
resolve(resArr)
}
}
)
})
})
}
执行结果