class MyPromise {
static allSettled(arr) {
const res = []
let count = 0;
return new Promise((resolve, reject) => {
for (let i = 0; i < arr.length; i++) {
if (arr[i] instanceof Promise) {
arr[i].then(value => {
count++
res[i] = { status: "resolve", value }
if (count === arr.length) {
resolve(res)
}
},
reason => {
count++
res[i] = { status: "reject", reason }
if (count === arr.length) {
reject(res)
}
}
)
}
}
})
}
}
let p1 = new Promise(function (resolve, reject) {
setTimeout(function () {
resolve(1)
}, 1000)
})
let p2 = new Promise(function (resolve, reject) {
setTimeout(function () {
reject(2)
}, 2000)
})
let p3 = new Promise(function (resolve, reject) {
setTimeout(function () {
resolve(3)
}, 3000)
})
MyPromise.allSettled([p3, p1, p2]).then(res => {
console.log(res)
})