Promise.all() 有什么特性

将多个promise实例包装成一个新的promise实例,成功返回一个结果数组,失败返回第一个reject的值。
成功:传一个数组,里面都是promise,(也可以不是promise,也可以是常量)
失败:其中一个执行报错,会返回到catch,其他的promise还是会执行,因为他在创建,实例化的时候就执行了。

手写promise.all()

//promise.all()依然返回一个新的promise

function PromiseAll(promiseArray){
  return new Promise((resolve,reject)=>{

      if(!Array.isArray(promiseArray)){//判断是否是数组
        return reject(new Error('传入的参数必须是参数'))
      }
      const res=[];
      let count=0;//计时器
      for(let i=0;i<promiseArray.length;i++){
        //返回的数组不一定全是promise,需要进行判断,promise.resolve会自动将参数包装成一个promise  
        Promise.resolve(promiseArray[i]).then(value=>{
              count++;
              res[i]=value;
              //count的作用  如果直接push,因为promise顺序不同,会导致乱序 
              //js数组的特性,res[6]='xxx' 则res.length=7;因此res.length并不准确
              if(count===promiseArray.length){
                resolve(res)
              }
          }).catch(e=>{
            reject(e)
          })
      }
  })
}

→_→空
4 声望0 粉丝

« 上一篇
防抖和节流
下一篇 »
前端性能优化