实现一个promise.all方法


思路:

1:首先明白all的用法

2:promise.all可以接受一个由promise数组作为参数,并且返回一个promise实例,

3:promise.all([a,b,c...]).then方法之后的结果是一个数组,返回的数组是参数中依次执行的返回值

4: 参数中的promise有一个失败则全部失败

// 判断传递进来数组是否是promise,不是promise直接返回了
const isPromise = value => typeof value.then === 'function'
Promise.all = function(promises){
  return new Promise((resolve,reject) => {
    let arr = []
    let idx = 0;
    const processData = (key,data) => {
      arr[key] = data;
      if(++idx === promises.length){
        // 如果都成功了返回这个数组
        resolve(arr)
      }
    }


    for(let i=0;i< promises.length;i++){
      let result = promises[i];
      if(isPromise(result)){
        // 如果是promise ,通过then返回结果
        result.then(data => {
          processData(i,data) // 让结果和索引对应上
        },reject)
      }else{
        processData(i,result)
      }
    }
  })
  
}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM