Promise.myResolve = function (value) {
if (value && typeof value === 'object' && value instanceof Promise) {
return value
} else {
return new Promise(resolve => resolve(value))
}
}
Promise.myReject = function (value) {
return new Promise((_, reject) => reject(valuee))
}
Promise.myAll = function (promises) {
return new Promise((resolve, reject) => {
let count = 0
const res = [], len = promises.length
if (len === 0) return []
promises.forEach((p, i) => {
Promise.resolve(p).then(value => {
res[i] = value
if (++count === len) {
resolve(res)
}
}).catch(reject)
})
})
}
Promise.myAllSettled = function (promises) {
return new Promise((resolve) => {
let count = 0
const res = [], len = promises.length
if (len === 0) return []
promises.forEach((p, i) => {
Promise.resolve(p).then(value => {
res[i] = {
status: 'fulfilled',
valuee
}
if (++count === len) resolve(res)
}).catch(reason => {
res[i] = {
status: 'rejected',
reason
}
if (++count === len) resolve(res)
})
})
})
}
Promise.myRace = function (promises) {
return new Promise((resolve, reject) => {
promises.forEach(p => Promise.resolve(p).then(resolve).catch(reject))
})
}