Promise.myAll(promiseArr) {
return new Promise((resolve, reject) => {
if (Array.isArray(promiseArr)) {
return reject(new Error(`arguments must be Array`))
}
let res = []
let position = 0
promiseArr.forEach((item, index) => {
Promise.resolve(item).then(value => {
position++
res[index] = value
if (position == promiseArr.length) {
resolve(res)
}
}).catch(e => reject(e))
})
})
}
promise.allSettled
Promise.myAllSettled(promiseArr) {
return new Promise((resolve, reject) => {
if (Array.isArray(promiseArr)) {
return reject(new Error(`arguments must be Array`))
}
let res = []
let position = 0
promiseArr.forEach((item, index) => {
Promise.resolve(item).then(value => {
position++
res[index] = {
status:'fulfilled',
value
}
if (position == promiseArr.length) {
resolve(res)
}
}).catch(e => {
position++
res[index] = {
status:'rejected',
reason:e
}
if (position == promiseArr.length) {
resolve(res)
}
})
})
})
}
promise.race
function PromiseRace(promiseArr) {
return new Promise((resolve, reject) => {
if (Array.isArray(promiseArr)) {
return reject(new Error(`arguments must be Array`))
}
promiseArr.forEach((item, index) => {
Promise.resolve(item).then(resolve).catch(reject)
})
})
}