我有一个成功登录用户的功能。
from binascii import unhexlify
from bitcoin.rpc Proxy
p = Proxy("http://rpcuser:rpcpass@127.0.0.1:8332")
h = unhexlify("4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b")
print(p.gettransaction(h))
我想要的是在用户成功登录时调用函数_login: function() {
var email = this.$.emailvalue.value;
var password = this.$.passwordvalue.value;
return this.$.authenticate.signInWithEmailAndPassword(email, password).then(function() {
// Sign-in successful.
//this._animateView(); **returns undefined**
}, function(error) {
// An error happened.
// // Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
console.log(errorMessage);
// this._animateErrorView(); **returns undefined**
});
},
,在出现错误时调用this._animateView();
。
如果我尝试这样做,则返回undefined ..如何解决此问题
答案 0 :(得分:1)
this
的含义在回调函数中有所不同。
你可以通过多种方式解决这个问题,但这里有两个。
您无法阻止this
获取新值,因为这只是JavaScript闭包的工作方式。但您可以做的是使用您需要的值定义不同的值。该变量的惯用名称为self
,但我个人更喜欢更具描述性的内容:
_login: function() {
var email = this.$.emailvalue.value;
var password = this.$.passwordvalue.value;
var self = this;
return this.$.authenticate.signInWithEmailAndPassword(email, password).then(function() {
self._animateView();
}, function(error) {
var errorCode = error.code;
var errorMessage = error.message;
console.log(errorMessage);
self._animateErrorView();
});
}
ES6定义了一种使用所谓的胖箭头(=>
)声明函数的新方法。除了稍微减少代码之外,这些代码确保lambda / callback中this
的值保持不变。所以
_login: function() {
var email = this.$.emailvalue.value;
var password = this.$.passwordvalue.value;
return this.$.authenticate.signInWithEmailAndPassword(email, password).then(() => {
this._animateView();
}, (error) => {
var errorCode = error.code;
var errorMessage = error.message;
console.log(errorMessage);
this._animateErrorView();
});
}
答案 1 :(得分:1)
除了@Frank van Puffelen的回答之外,聚合物开发团队还使用了另一种方法:
_login: function() {
var email = this.$.emailvalue.value;
var password = this.$.passwordvalue.value;
return this.$.authenticate.signInWithEmailAndPassword(email, password).then(function() {
// Sign-in successful.
//this._animateView(); **returns undefined**
}.bind(this), function(error) {
// An error happened.
// // Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
console.log(errorMessage);
// this._animateErrorView(); **returns undefined**
}.bind(this));
},
所以基本上你会在最后的每个回调中添加.bind(this)
。