Skip to content

实现一个 Promise.all

js
// 传入参数为一个空的可迭代对象,则直接进行resolve
// 如果参数中有一个promise失败,那么Promise.all返回的promise对象失败
// 在任何情况下,Promise.all返回的promise的完成状态的结果都是一个数组

Promise.all = function (promises) {
  return new Promise((resolve, reject) => {
    let result = []
    let index = 0
    let len = promises.length
    if (len === 0) {
      resolve(result)
      return
    }
    for (let i = 0; i < len; i++) {
      // 为什么不直接[promises[i].then,因为promise[i]可能不是一个promise
      Promise.resolve(promises[i])
        .then((data) => {
          result[i] = data
          index++
          if (index === len) resolve(result)
        })
        .catch((err) => {
          reject(err)
        })
    }
  })
}

如有转载或 CV 的请标注本站原文地址