Open MarsPen opened 2 years ago
function allSettled(promises) {
// 如果传入的参数为空,那么返回一个空的 Promise
if (promises.length === 0) {
return Promise.resolve([])
}
// 匹配传入的参数,如果是 Promise 对象,那么就返回 Promise 对象
let promisesIterable = promises.map((item)=>{
return item instanceof Promise ? item : Promise.resolve(item)
})
// 创建一个数组,用来存储所有的 Promise 的状态
let results = []
// 用来记录当前已经完成的 Promise 的数量
let completed = 0
return new Promise((resolve, rejected) => {
// 循环遍历传入的参数,并且创建一个 Promise
for (let i=0; i < promisesIterable.length; i++) {
Promise.resolve(promisesIterable[i])
.then((value)=>{
results[i] = {status: 'fulfilled', value}
})
.catch((reason)=>{
results[i] = {status: 'rejected', reason}
})
.finally(()=>{
// 当所有的 Promise 都完成的时候,返回结果 并且调用 resolve
completed++
if (completed === promisesIterable.length) {
resolve(results)
}
})
}
})
}
题目描述
Promise.allSettled()
方法返回一个在所有给定的promise
都已经fulfilled
或rejected
后的promise
,并带有一个对象数组,每个对象表示对应的promise
结果。和
Promise.all()
不同,Promise.allSettled()
会等待所有的promise
直到fulfill
或者reject
。