AngularJS - 从异步http请求返回值

时间:2015-06-07 19:26:52

标签: ajax angularjs

我需要获得有效的访问令牌,因此我为该

创建了一个函数
getValidAccessToken(){
    /*
    SOME CODE ...
    */

    if(!expired){
        return accessToken
    }
    else{
        // AJAX call for new token
        // return accessToken containing new token 
    }

}

所以当我调用getValidAccessToken()时,我想获得accessToken(当前的一个或新的将来自AJAX调用)

1 个答案:

答案 0 :(得分:0)

你需要使用promises。在Angular中,最好使用$q service provider。您需要创建一个promise,然后从该方法返回它。然后在该方法中,解决或拒绝承诺。

getValidAccessToken(){
    var deferred = $q.defer();
    /*
    SOME CODE ...
    */

    if(!expired){
        deferred.resolve(accessToken);
    }
    else{
        // AJAX call for new token
        $http.get('/some/url/accessToken')
            .success(function(data) {
                // return accessToken containing new token 
                deferred.resolve(data.accessToken);
            }).
            .error(function(error) {
                deferred.reject(error);
            });
    }

    return deferred;
}

然后,在使用此方法的代码中,在解析或拒绝promise时调用方法:

var tokenCall = getValidAccessToken();
tokenCall.then(function(token) {
    // Use the token somehow
}, function(error) {
    // Crap. There was an error.
});