美文网首页
手动实现 Promise.all 与 Promise.race

手动实现 Promise.all 与 Promise.race

作者: SciFiTokido | 来源:发表于2021-03-14 09:49 被阅读0次

原文:https://github.com/xieranmaya/Promise3/blob/master/Promise3.js

Promise.all

Promise.all = function(promises) {
    return new Promise(function(resolve, reject) {
      var resolvedCounter = 0
      var promiseNum = promises.length
      var resolvedValues = new Array(promiseNum)
      for (var i = 0; i < promiseNum; i++) {
        (function(i) {
          Promise.resolve(promises[i]).then(function(value) {
            resolvedCounter++
            resolvedValues[i] = value
            if (resolvedCounter == promiseNum) {
              return resolve(resolvedValues)
            }
          }, function(reason) {
            return reject(reason)
          })
        })(i)
      }
    })
  }

Promise.race

  Promise.race = function(promises) {
    return new Promise(function(resolve, reject) {
      for (var i = 0; i < promises.length; i++) {
        Promise.resolve(promises[i]).then(function(value) {
          return resolve(value)
        }, function(reason) {
          return reject(reason)
        })
      }
    })
  }

相关文章

网友评论

      本文标题:手动实现 Promise.all 与 Promise.race

      本文链接:https://www.haomeiwen.com/subject/gecqcltx.html