我在承诺中绑定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
时,我会看到 using (StreamWriter sw = new StreamWriter(fs))
{
sw.Write(" " + columnsXs[k] + " ");
}
我想要using
,我不明白为什么。
答案 0 :(得分:2)
这会将评论中添加的评论考虑在内:
this.database_view_settings = { 'habal': '1' };
this.init = () => AuthenticationService.getToken()
.then((token) => $http.get('/api/user/settings/database_view/get', { headers: { 'id_token': token } }))
.then((data) => {
this.database_view_settings = data;
return data;
});
然后,在其他任何地方:
this.init().then((data) => {
// do your stuff with data
}).catch((error) => {
// oops...
})
答案 1 :(得分:0)
我怀疑您的特定问题的问题是因为您没有将this
绑定到您的$http.get
成功功能。话虽如此,如果你的目标是不断地将this
的引用传递给嵌套函数,那么这真的是很多绑定。您也可以在外部函数中使用var _this = this
之类的内容,并在所有嵌套函数中引用_this
变量。此外,正如评论所建议的那样,使用箭头功能会自动绑定它,以使代码更清晰。
最后,无论更改如何,您都不需要在主this
函数上绑定this.init
。对象属性的this
绑定到对象本身,在这种情况下,对象为this
。