承诺实际自我实现

Promise Practical Self-Implement

我想将数据传递给 then 方法,但是当我通过给它 this.passedResolve 来做到这一点时,它会得到 undefined

    function Promises(callback){
      if(callback){
        callback(Promises.prototype.resolve, Promises.prototype.reject);
      }
    }

    Promises.prototype.resolve = function(data){
      this.passedResolve = data;
    }

    Promises.prototype.reject = function(err){
      console.log(new Error(err));
    }

    Promises.prototype.thens = function(cb){
      cb(this.passedResolve);
    }

    function loadImg(url){
      return new Promises(function(resolve, reject){
        var el = new Image()
        el.onload = function(){
          resolve(el)
        }
        el.onerror = function(){
          reject('Error')
        };
        el.src = url;
      })
    }

    loadImg('https://s-media-cache-ak0.pinimg.com/736x/12/64/da/1264da4a3f18207dc22592102abae40d.jpg').thens(function(e){
      console.log(e)
    })

    var x = new Promises()
    console.log(x)

这是因为局部 this 变量超出了作用域。您需要将其绑定到当前实例。

function Promises(callback){
  if(callback){
    callback(Promises.prototype.resolve.bind(this), Promises.prototype.reject.bind(this));
  }
}

否则,passedResolve函数将被赋值给另一个对象。所以当 Promises 想要它时,它会得到 undefined。我希望这是有道理的。

JavaScript 如您所见,对象到处都有一些怪癖。