const isPromise = (fn)=>{
return !!fn && Object.prototype.toString.call(fn) ==='[object Promise]'
}
const p1 = new Promise(resovle=>{
setTimeout(()=>{
resovle('p1 ok')
},100)
})
const p2 = new Promise(resovle=>{
setTimeout(()=>{
resovle('p2 ok')
},500)
})
const p3 = new Promise((re,reject)=>{
setTimeout(()=>{
reject('p3 ok')
},1000)
})
const p4 = new Promise(resovle=>{
setTimeout(()=>{
resovle('p4 ok')
},100)
})
const promiseAll = (args)=>{
if(!args instanceof Array) return console.error('传参必须是个数组')
return new Promise((resovle,reject)=>{
let resovleSum = 0;
const result = new Array(args.length)
args.forEach((pfn,inx) => {
if(isPromise(pfn)){
pfn.then((res)=>{
result[inx] = res;
if(++resovleSum === args.length){
resovle(result)
}
}).catch(res=>{
reject(res)
})
}else{
result[inx] = pfn;
if(++resovleSum === args.length){
resovle(result)
}
}
});
})
}
promiseAll([p1,p2,7,p3,p4]).then(res=>{
console.log(res)
}).catch(res=>{
console.log('S',res)
})