实现一个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)
      }
    }
  })
  
}
原文地址:https://www.cnblogs.com/qqfontofweb/p/13258101.html