2015-06-07 149 views
-2

我需要得到有效的访问令牌,所以我创建为AngularJS - 从异步HTTP请求返回值

getValidAccessToken(){ 
    /* 
    SOME CODE ... 
    */ 

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

} 

所以,当我打电话getValidAccessToken()我想要得到的accessToken(当前或新功能这将来自AJAX呼叫)

+1

我们不是写代码为您服务。尝试一些东西,并带来一个具体问题。 – Blackhole

回答

0

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

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; 
} 

然后,在使用此方法的代码,调用时承诺解决或拒绝的方法:

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