使用getter绑定返回promise对象的函数

时间:2015-01-15 14:39:18

标签: javascript jquery

使用javascript getters是将函数调用绑定到对象定义的一种很酷的方法。我以前曾多次使用它,但在最近的一个问题中,我想用它来绑定一个函数,该函数返回一个jQuery promise对象,该对象在$ .when ... $。then chain中使用。

似乎使用吸气剂并不像我期望的那样工作;具体来说,$ .then()在使用getter返回的函数定义时,不会等待绑定函数的promise对象被解析。但是,如果没有使用getter,我只是直接调用函数,事情按预期工作。

知道为什么会这样吗?

示例:

var myObj = {
  asynch1: {
    a: 200,
    b: 300,
    get runAsynch3() {return function() {
      myCustomAsynchCode3(this.a, this.b);
      }
    },
  },
};

function myCustomAsynchCode1() {
  var df = $.Deferred();
  // do stuff that, when done, calls
  //  df.resolve();
  return df.promise();
}
function myCustomAsynchCode2() {
  var df = $.Deferred();
  // do stuff that, when done, calls
  //  df.resolve();
  return df.promise();
}
function myCustomAsynchCode3(val1, val2) {
  var df = $.Deferred();
  // do stuff that, when done, calls
  //  df.resolve();
  return df.promise();
}

如果我打电话,如

var that = this;
$.when(myCustomAsynchCode1()).
  then(function() {
    return that.myCustomAsynchCode2();
  ).
  then(function() {
    return that.myObj.runAsynch3();
  });

runAsynch3()在myCustomAsynchCode2()解析其promise对象之前执行。

但是,如果我这样打电话

var that = this;
$.when(myCustomAsynchCode1()).
  then(function() {
    return that.myCustomAsynchCode2();
  ).
  then(function() {
    return myCustomAsynchCode3(that.myObj.a, that.myObj.b);
  });

一切都按预期工作 - 承诺对象在不相互踩踏的情况下得到解决。

0 个答案:

没有答案