Promise.all
Promise.myAll = function(list){
let results = []
let count = 0
return new Promise((resolve,reject)=>{
list.map((item,index)=>{
Promise.resolve(item).then((data)=>{
results[index] = data
count++
if(count >= list.length){
resolve(results)
}
},
(reason)=>{
reject(reason)
})
})
})
}
const promise1 = Promise.resolve(3)
const promise2 = 42
const promise3 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, 'foo')
})
Promise.myAll([promise1, promise2, promise3]).then(values => {
console.log(values)
})
Promise.allSettled
Promise.myAllSettled = list => {
let results = []
let count = 0
return new Promise((resolve, reject) => {
list.map((item, index) => {
Promise.resolve(item).then(
data => {
results[index] = { status: 'fulfilled', val: data }
count++
if (count >= list.length) {
resolve(results)
}
},
reason => {
results[index] = { status: 'rejected', val: reason }
count++
if (count >= list.length) {
resolve(results)
}
}
)
})
})
}
Promise.myAllSettled([
Promise.resolve(33),
new Promise(resolve => setTimeout(() => resolve(66), 0)),
99,
Promise.reject(new Error('一个错误')),
]).then(values => console.log(values))