我在绑定this
时遇到了问题。我有角的服务如下功能:
this.database_view_settings = {'habal':'1'}
this.init = function(){
console.log("1",this.database_view_settings)
return $q((resolve, reject) => {
console.log("2",this.database_view_settings)
AuthenticationService.getToken().then(function(token){
$http.get('/api/user/settings/database_view/get',{headers:{'id_token':token}})
.success(function(data) {
console.log("3",this.database_view_settings)
this.database_view_settings = data;
console.log("login",this.database_view_settings)
resolve(this.database_view_settings)
})
.error(function(data) {
console.log('Error: ' + data);
reject(data)
});
}.bind(this))
})
}.bind(this)
我的问题是,虽然在console.log 1 and 2
我明白我要{'habal':'1'}
在console.log 3
我得到一个undefined
,我不明白为什么。
你为什么要这么做?既然你明显使用ES6,那么你应该使用箭头 - 他们正是那里 - 所有承诺回调。该片段格式不正确,无法说出所在的位置。但是,除非你已经完成了“绑定(这个)”到每一个回调(而你没有),否则在某些时候你将不可避免地失去了词法。 – estus
加上它看起来像你陷入[被遗忘的承诺](http://taoofcode.net/promise-anti-patterns/#the-forgotten-promise:8f173b15e2d19515fdc8ce931ae539c0)反模式。 – sp00m
['.success'和'.error'方法已被弃用并从AngularJS中移除](http://stackoverflow.com/questions/35329384/why-are-angular-http-success-error-methods-deprecated-除去从 - V1-6/35331339#35331339)。当$ http服务已经返回承诺时,也不需要使用'$ q(resolve,reject)'来制造承诺。 – georgeawg