(前端手撕)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) }) ) }) }