Skip to content

✍️ Promise.all

思路 :

  1. 首先判断传入的参数是否为可遍历对象,如果不是则直接reject

  2. 判断是否为空数组,如果是则直接resolve([])

  3. 遍历promises并将执行结果存进result,当promises全部resolve执行完毕则返回resolve(result数组),当有一个出现错误则直接退出循环返回reject(错误)结束Promise.all函数

js
Promise.myAll = function (promises) {
  return new Promise((resolve, reject) => {
    if (typeof promises[Symbol.iterator] !== 'function') {
      reject('promises typeError!')
    }
    if (promises.length == 0) {
      resolve([])
    } else {
      let result = []
      let count = 0
      const length = promises.length
      for (let i = 0; i < length; i++) {
        Promise.resolve(promises[i])
          .then(value => {
            result[i] = value
            if (++count === length) {
              resolve(result)
            }
          })
          .catch(error => {
            reject(error)
          })
      }
    }
  })
}