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) { ... });
  }
Другие вопросы по тегам