Angular - асинхронная операция с перехватчиком запроса
У меня есть запрос перехватчик, как показано ниже:
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 не ожидает добавления заголовка авторизации в запросе и толкает перехватчик перед добавлением заголовка авторизации.
Есть ли способ сделать мой заголовок-перехватчик частью обещания, которое разрешается после завершения обещания accessToken?
1 ответ
Решение
Как сказано в руководстве,
запрос: перехватчики вызываются с объектом конфигурации http. Функция может свободно изменять объект конфигурации или создавать новый. Функция должна возвращать объект конфигурации напрямую или обещание, содержащее конфигурацию или новый объект конфигурации.
Так и должно быть:
function requestInterceptor(req) {
return $injector.get('tokenService').accessToken().then(function(res) {
...
return req;
}, function(e) { ... });
}