1 要点

  1. 知道要在Promise上写而不是在原型上写

  2. 知道 all 的参数(Promise的数组)和返回值(新Promise对象)

  3. 知道用数组来记录结果

  4. 知道只要有一个 reject 就整体 reject

2 代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
Promise.myAll = function(pList){
  const successList = []
  let count = 0
  return new Promise((resolve, reject) => {
    // 遍历执行promise
    // 成功就加入数组,继续执行下一个promise
    // 失败就直接执行reject
    pList.map((promise, index) => {
      promise.then((r)=>{
        successList[index] = r
        count += 1
        // 当全部执行成功后,执行resolve
        if(count === pList.length){
          resolve(successList)
        }
      }, (r)=>{
        reject(r)
      })
    })
  })
}