我使用以下代码从我的客户端API获取AngularJS应用程序令牌,然后将此令牌保存在每30分钟到期的cookie中。我已经添加了代码来首先检查cookie,如果它没有过期,那么我可以在cookie中使用令牌,如果已过期,那么我将从服务器请求新令牌。
我现在面临的问题是getToken必须返回一个promise,如果我使用$ http调用API,这很容易,但想知道如何在检查cookie后返回一个promise并从cookie返回令牌调用API?任何例子都非常感谢。感谢
getToken : function(){
var token = '';
var deferred = $q.defer();
var urlString = 'http://domainname.com/client.php';
//returns '' if cookie expired or token if cookie exist...
token = LocalService.getTokenCookie();
if(token == ''){
$http({ method:'POST',
url: urlString,
headers: { 'content-type' : 'application/x-www-form-urlencoded; charset=UTF-8'
},
responseType: 'json'
}).success(function(data,status,headers,config){
deferred.resolve(data);
token = data.Token;
//....save token in a cookie...
}).error(function(data,status,headers,config){
deferred.reject(status);
});
}
return deferred.promise;
}
答案 0 :(得分:4)
您可以立即解决延迟问题,promise.then(...)
仍然可以正确处理(即使解析后调用)。 E.g:
getToken : function(){
var token = '';
var deferred = $q.defer();
...
token = LocalService.getTokenCookie();
if(token == ''){
$http({...}).success(function (data) {
deferred.resolve(data);
...
}).error(function (data, status) {
deferred.reject(status);
});
} else {
/* Resolve immediatelly */
deferred.resolve(token);
}
return deferred.promise;
}