143 字
1 分钟
手写promise allSettled

Promise allSettled#

// Promise allSettled
Promise._allSettled = function (taskArr) {
return new Promise((resolve, reject) => {
const result = []; // 结果数组
let count = 0; // 计数,当count等于taskArr的长度的时候,说明都处理完这些promise了
taskArr.forEach((task, index) => {
if (!(task instanceof Promise)) task = Promise.resolve(task);
task.then((value) => {
result[index] = {
status: 'fullfilled',
value
}
count++;
if (count === taskArr.length) {
resolve(result)
}
}, (reason) => {
result[index] = {
status: 'rejected',
reason
}
count++;
if (count === taskArr.length) {
resolve(result)
}
})
})
})
}
Promise._allSettled([
() => '我不是一个promise',
Promise.resolve(12121),
new Promise((resolve) => {
setTimeout(() => {
resolve('motherfucker')
}, 4000);
}),
new Promise((resolve, reject) => {
setTimeout(() => {
reject('hello')
}, 3000);
})
]).then((data) => {
console.log(data);
})
手写promise allSettled
https://nollieleo.github.io/posts/手写promise-allsettled/
作者
翁先森
发布于
2021-12-13
许可协议
CC BY-NC-SA 4.0