手写Promise.all

145 阅读1分钟

手写Promise.all

写前要点

  1. 知道all的返回参数。
  2. 知道用数组来记录结果。
  3. 知道只要有一个 reject 就整体 reject。

通过使用方法来反推代码怎么写,可很好想出思路。

代码实现

Promise.myAll = (promiseList) => {
  return new Promise((resolve, reject) => {
    const result = []
    const length = promiseList.length
    let count = 0
    promiseList.map((promise, index) => {
      promise.then((data) => {
        result[index] = data
        count += 1
        if (count === length - 1) {
          resolve(result)
        }
      }, (err) => {
        reject(err)
      })
    })
  })
}
// 测试代码
const promiseList = [Promise.resolve('1'), Promise.reject('2'), Promise.resolve('3')]
Promise.myAll(promiseList).then(data => console.log(data), err => console.error(err))