如何使用call或apply?
将其绑定到回调函数SKNode
在某些时候引发错误:
TypeError:this.get不是函数
这应该引用Ember Controller范围,为什么如果我先绑定bind(this)然后调用(this)会抛出错误?
答案 0 :(得分:1)
你最好使用bind
。
function doSomething(){
return authorize().then((function(){
}).bind(this));
}
bind()函数创建一个新函数(一个绑定函数),它具有相同的函数体(ECMAScript 5术语中的内部调用属性),因为它被调用的函数(绑定函数的目标函数)具有此值绑定到bind()的第一个参数,它不能被覆盖。
编辑:你仍然犯同样的错误。 promise方法then
接受一个函数引用,因此它可以在它被解决后调用它。你正在做的是执行函数并将函数的返回值传递给then
方法,在本例中是另一个promise对象。
让我们分解:
beforeModel: function(params) {
//Function to be passed down to your promise to find a Client.
//Note that nothing gets passed down to the next step once the promise gets settled.
var fClient = function() {
this.findClient(params);
};
//We want this to be this (of beforeModel function).
fClient = fClient.bind(this);
//I have no idea what you are trying to do with the catch...
var reAttachPromise = function() {
return this.get('session').authorize().then(fClient);
};
//We want this to be this (of beforeModel function).
reAttachPromise = reAttachPromise.bind(this);
return this.get('session').authenticate().then(fClient).catch(reAttachPromise);
//can be reduced to:
// return reAttachPromise().catch(reAttachPromise);
}
答案 1 :(得分:0)
}.bind(this)).catch(function(err){
//retrieve new session
return this.get('session').authorize().then(function(){
this.findClient(params);
}.call(this));
}.bind(this)); //!!
!
- 评论专栏被我改变了。
您正确绑定了success
函数,但未绑定failure
函数。很容易错过!