(前端手撕)5. 手写promise.all与race
手写promise.all与race
1. 手写promise.all
function promiseAll (promises) {
return new Promise(function(resolve,reject){
if(!Array.isArray(promises)){
return reject(new TypeError('argunments must be Array'))
}
var resolvedCount = 0;
var promiseNum = promises.length;
var resolvedValues = new Array(promiseNum);
for(let i = 0;i<promiseNum;i++){
Promise.resolve(promise[i]).then(function(value){
resolvedCount++;
resolvedValues[i] = value;
if(promiseNum == resolvedCount){
return resolve(resolvedValues)
}
},function(reason){
return reject(reason)
})
}
})
}
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
2. 手写promise.race
function promiseRace(promises) {
if (!Array.isArray(promises)) {
throw new Error("promises must be an array")
}
return new Promise(function (resolve, reject) {
promises.forEach(p =>
Promise.resolve(p).then(data => {
resolve(data)
}, err => {
reject(err)
})
)
})
}