我之前的问题是重复的,我从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
};
答案 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)();
});
}
将self.shouldContinue
绑定到self
并为其提供适当的参数。
.bind
会返回Function
,因此您需要调用它。所以self.shouldContinue
将继续调用self.getMoreData
,否则它会等待到被称为。