题目描述
实现一个函数 allSettled:
-
接收一个
Promise数组。 -
无论其中的
Promise是成功(resolved)还是失败(rejected),该函数返回的Promise都必须等待所有任务结束。 -
最终返回的结果应该是一个数组,数组中的每个元素描述了对应
Promise的结果状态。
实现
function MyPromiseAllSettled(promises){
const n = promises.length;
const results = new Array(n);
if (n === 0) return Promise.resolve([]);
return new Promise((resolve, reject) => {
let count = 0;
for (const [index, promise] of promises.entries()){
promise
.then(value => {
results[index] = {
status: 'fulfilled',
value: value
};
})
.catch(reason => {
results[index] = {
status: 'rejected',
reason: reason
};
})
.finally(()=>{
count++;
if (count === n) {
resolve(results);
}
})
}
})
}