Angular - 请求拦截器的异步操作

时间:2017-02-03 18:22:32

标签: angularjs angular-http-interceptors

我有我的请求拦截器,如下所示:

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承诺完成后解决的?

1 个答案:

答案 0 :(得分:3)

正如the manual所说,

  

请求:使用http配置对象调用拦截器。该函数可以自由修改配置对象或创建新对象。该函数需要直接返回config对象,或者包含config或新配置对象的promise。

所以它应该是:

  function requestInterceptor(req) {
      return $injector.get('tokenService').accessToken().then(function(res) {
        ...
        return req;
      }, function(e) { ... });
  }