如何将其绑定到回调?

时间:2015-06-23 13:22:44

标签: javascript jquery

我之前的问题是重复的,我从post it duplicated读了答案,但没有运气。

我已按照SO帖子的答案中的建议添加了绑定。但我仍然未定义。

我有一系列的承诺,在每次执行之前,我会检查用户是否取消了承诺链。

我的问题是,我无法访问这个'在回调方法里面,一个粗略的例子如下,我无法访问getMoreData()里面的p.test变量

p.test = 'hello!';

p.init = function(){ 
    var self = this;

    this.getData() 
        .then(function(data) {
            return self.shouldContinue(getMoreData,data).bind(self);
        });
}

p.shouldContinue = function(cb, data) {
    // ...
    this.currentRequest = cb.call(this,data);
};

p.getData = function(){
    // return ajax call
};

p.getMoreData = function(){
    console.log(this.test); // undefined
    // return ajax call
};

3 个答案:

答案 0 :(得分:0)

return self.shouldContinue(getMoreData,data).bind(self);

看起来你不小心调用 shouldContinue,并尝试绑定其结果,而不是在不调用它的情况下绑定函数。这应该可以满足您的需求。

return self.shouldContinue.bind(self, self.getMoreData, data);

请记住,getMoreData是一个未在变量范围内定义的函数,因此需要使用.

进行访问

编辑:同时注意到shouldContinue也存在类似问题,但我对代码某些部分的意图感到困惑,所以我添加了评论以询问更多信息。

答案 1 :(得分:0)

你试过这个吗?
您需要将cubist code called exit with value 1 Error in strsplit(tmp, "\"")[[1]] : subscript out of bounds 绑定到cb

this

答案 2 :(得分:0)

更改为:

 p.init = function(){ 
      var self = this;

      this.getData() 
          .then(function(data) {
              return self.shouldContinue.bind(self, self.getMoreData, data)();
          });
  }
  1. self.shouldContinue绑定到self并为其提供适当的参数。

  2. .bind会返回Function,因此您需要调用它。所以self.shouldContinue将继续调用self.getMoreData,否则它会等待到被称为。