比较好理解,直接看代码吧。
Promise.all = function(promises) {
let res = new Array(promises.length)
promises = promises.map((promise,index)=>{
if(promise instanceof Promise){
return promise
}else{
return Promise.resolve(promise)
}
})
let resolvedPromise = 0
return new Promise((resolve,reject)=>{
promises.forEach((promise,index)=>{
promise.then((result)=>{
res[index] = result
resolvedPromise++
if(resolvedPromise == promises.length){
resolve(res)
}
},(reason)=>{
reject(reason)
})
})
})
}
Promise.race = function(promises){
promises = promises.map((promise,index)=>{
if(promise instanceof Promise){
return promise
}else{
return Promise.resolve(promise)
}
})
return new Promise((resolve,reject)=>{
promises.forEach((promise)=>{
promise.then((result)=>{
resolve(result)
},(reason)=>{
reject(reason)
})
})
})
}
Promise.allSettled = function(promises){
promises = promises.map((promise,index)=>{
if(promise instanceof Promise){
return promise
}else{
return Promise.resolve(promise)
}
})
let res = new Array(promises.length)
let settledPromise = 0
return new Promise((resolve,reject)=>{
promises.forEach((promise,index)=>{
promise.then(result=>{
res[index] = result
nowSettled++
},reason=>{
res[index] = reason
nowSettled++
})
resolve(res)
})
}
}
Promise.any() = function(promises) {
let res = new Array(promises.length)
promises = promises.map((promise,index)=>{
if(promise instanceof Promise){
return promise
}else{
return Promise.resolve(promise)
}
})
let rejectedPromise = 0
return new Promise((resolve,reject)=>{
promises.forEach((promise,index)=>{
promise.then((result)=>{
resolve(result)
},(reason)=>{
res[index] = reason
rejectedPromise++
if(rejectedPromise == promises.length){
reject(res)
}
})
})
})
}