如何手撕promise.all方法
具体实现请看下方代码
function promiseAll(promiseArray){
return new Promise( (resolve, reject) => {
if(!Array.isArray(promiseArray)){
reject("参数类型错误")
}
let promiseResults = [];
let count = 0;
for(let i = 0; i < promiseArray.length; i++){
Promise.resolve(promiseArray[i]).then((item) => {
promiseResults[i] = item;
count++;
if(count === promiseArray.length){
resolve(promiseResults);
}
}).catch(err => {
reject(err);
});
}
})
}
const p1 = new Promise((res, rej) => {
setTimeout(() => {
res('p1')
}, 1000)
})
const p2 = new Promise((res, rej) => {
setTimeout(() => {
res('p2')
}, 2000)
})
const p3 = new Promise((res, rej) => {
setTimeout(() => {
res('p3')
}, 3000)
})
const test = promiseAll([p1, p2, p3])
.then(res => console.log(res))
.catch(e => console.log(e))
console.log(test);