核心思路
1.Promise.all()方法最终只返回一个promise对象,所以要直接写一个return new Promise((resolve,reject)=>{})
2.Promise.all()方法接收的是一个可遍历的数组,输入的promise的reslove回调结果是一个数组;
3.已经使用promise.resolve(),包裹一层,使其返回一个promise对象,何时将结果返回出来呢?
定义了计数器,如果内部promise计数加起来等于计数器的数量,这个时候,就可以将结果resolve()出来
代码实现
let p1 = new Promise((resolve,reject)=>{
setTimeout(()=>{
resove('111')
},1000)
})
let p2 = new Promise((resolve,reject)=>{
setTimeout(()=>{
resove('222')
},1000)
})
// promiseAll([p1,p2]).then(res=>{
// console.log(res)
// })
Promise.all([p1,p2]).then(res=>{
console.log(res)
})
function promiseAll(lists){
return new Promise((resolve,reject)=>{
let newArr = new Array(lists.length);
let num =0;
lists.forEach((item,index)=>{
item.then(res=>{
newArr.push(res)
num++;
if(num===lists.length){
resolve(newArr)
}
})
})
})
}