3-6 实现一个 Promise.allSettled 方法

/**
* 实现一个 Promise.allSettled 方法
* @param {*} list
* @returns [ { status: 'fulfilled'| 'rejected', value(fulfilled) | reason(rejected) } ]
*/
function myPromiseAllSettled(list) {
const result = [];
let count = 0;
return new Promise((reslove, reject) => {
list.forEach((promise, index) => {
promise.then((res) => {
const succeed = {
status: 'fulfilled',
value: res
}
result[index] = succeed;
count++;
},(err)=> {
const error = {
status: 'rejected',
reason: err
}
result[index] = error;
count++;
})
.finally(() => {
if(count >= list.length) {
reslove(result)
}
})
})
})
}
// test
const promise1 = Promise.resolve(3);
const promise2 = new Promise((resolve, reject) => setTimeout(reject, 100, 'foo'));
const promises = [promise1, promise2];
myPromiseAllSettled(promises).
then((results) => results.forEach((result) => console.log(result)));

本文作者:林见夕

本文链接:https://www.cnblogs.com/ifon/p/15971188.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   林见夕  阅读(103)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.