手写Promise.all

52 阅读1分钟

要点:

  1. 知道要在Promise上写而不是在原型上写
  2. 知道all的参数(Promise 数组)和返回值(新Promise对象)
  3. 知道用数组来记录结果
  4. 知道只有一个reject就整体reject
Promise.myAll = function(list){
    const results = []
    let count = 0 // 表示成功的数量 当成功的数量达到list的长度-1时 表示全部成功 
    return new Promise((resolve,reject)=>{ 
          list.map((promise,index)=>{
              promise.then((r)=>{
                  result[index]=r; //先后顺序 什么时候成功不确定 所以不能push
                  count+=1
                  if(count === list.length){
                      resolve(results)
                  }
              },(reason)=>{
                  reject(reason)
              })
          })
    }) //决定新的promise什么时候成功 什么时候失败
}