我有我的请求拦截器,如下所示:
var requestFactory = angular.module('queryParamsModule', [])
.factory('headerInterceptor', function($injector) {
return {
request: requestInterceptor
};
function requestInterceptor(req) {
var accessToken;
$injector.get('tokenService').accessToken().then(function(res) {
accessToken = res.access_token;
console.log(accessToken); >>>>> accessToken is populated fine!
req.headers = _.extend({
'Authorization': 'Bearer ' + accessToken
}, req.headers);
}, function(e) {
// error
});
return req;
}
})
.config(function($httpProvider) {
$httpProvider.interceptors.push('headerInterceptor');
});
return queryParamsFactory;
这里的问题是,angular不会等待在请求中添加Authorization Header并在添加Authorization标头之前推送拦截器。
有没有办法让我的头部拦截器成为承诺的一部分,这是在accessToken承诺完成后解决的?
答案 0 :(得分:3)
正如the manual所说,
请求:使用http配置对象调用拦截器。该函数可以自由修改配置对象或创建新对象。该函数需要直接返回config对象,或者包含config或新配置对象的promise。
所以它应该是:
function requestInterceptor(req) {
return $injector.get('tokenService').accessToken().then(function(res) {
...
return req;
}, function(e) { ... });
}