手写primoseAll

核心思路 

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)
         }
      })
    })
  })
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值