如何将其绑定到回调
How to bind this to a callback?
我之前的问题是重复的,我从重复的帖子中读到了答案,但没有运气。
我添加了一个绑定,正如SO帖子中的答案所建议的那样。但我仍然不确定。
我有一系列的承诺,在每次执行之前,我都会检查用户是否取消了承诺链。
我的问题是,我无法在回调方法中访问"this",下面是一个粗略的例子,我无法访问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
};
你试过这个吗
您需要将this
绑定到cb
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(this,data).bind(this);
};
p.getData = function(){
//return ajax call
};
p.getMoreData = function(){
console.log(this.test); //undefined
//return ajax call
};
更改为:
p.init = function(){
var self = this;
this.getData()
.then(function(data) {
return self.shouldContinue.bind(self, self.getMoreData, data)();
});
}
将CCD_ 2绑定到CCD_。
.bind
返回一个Function
,所以需要调用它。所以self.shouldContinue
会继续调用self.getMoreData
,否则它会留在那里等待调用。
return self.shouldContinue(getMoreData,data).bind(self);
看起来你不小心调用了shouldContinue,并试图绑定它的结果,而不是在不调用它的情况下绑定函数。这应该会得到你需要的。
return self.shouldContinue.bind(self, self.getMoreData, data);
请记住,getMoreData
是一个未在变量作用域下定义的函数,因此需要使用.
来访问它
编辑:我也注意到shouldContinue
也有类似的问题,但我对您代码的某些部分的意图感到困惑,所以我添加了一条注释来询问更多信息。
相关文章:
- 为什么prototypjs观察到回调函数有绑定
- 在Backbone.js中将回调绑定到此
- 将web服务回调的结果绑定到Javascript中的调用函数
- 将回调绑定到没有隔离作用域的指令
- 将其绑定在 backbone.js 中的 jQuery 回调中
- 将类方法绑定到类外绑定的事件处理程序内的AJAX成功回调
- KnockoutJS在绑定完成后触发回调
- 使用闭包/函数绑定将自函数作为回调传递
- 当通过Ajax成功回调更新可观察数组时,启用绑定中断
- 异步加载ASP.NET绑定的Javascript,然后调用回调
- 绑定promise回调函数的“this”范围
- 处理Ember中操作中的事件绑定和回调
- 如何绑定'这'到react类之外的函数,后者是来自其他组件的回调
- G+ 登录按钮回调绑定两次
- Backbone.js On Trigger回调绑定未按预期工作
- 在javascript中使用promise和原型时,优雅的回调绑定
- 将函数回调绑定到剑道网格
- 将ES7异步回调绑定到父作用域上下文的最简洁的方法是什么?
- Angular 1.5组件回调绑定没有执行
- 将回调绑定到 DynamoDB DocumentClient 的 ReactJS 状态