角度$ q绑定此

时间:2017-05-08 16:39:37

标签: javascript angularjs promise

我在承诺中绑定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,我不明白为什么。

2 个答案:

答案 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