处理拦截器中的AngularJS事件

时间:2017-09-14 15:30:34

标签: angularjs angular-http-interceptors

在将请求发送到服务器之前,是否可以让拦截器等待某个事件?

以下是拦截器的代码:

(function() {
  "use strict";
  angular.module("fuse").config(config);

  /** @ngInject */
  function config($httpProvider, $provide) {
    $provide.factory("httpInterceptor", function($q, $rootScope) {
      return {
        request: function(config) {
          // I need to wait for some event, read its argument and add this argument to the headers

          return config || $q.when(config); // Only return after handling the event
        },
        response: function(response) {
          console.log("Data Count: " + response.data.length);
          return response || $q.when(response);
        }
      };
    });

    $httpProvider.interceptors.push("httpInterceptor");
  }
})();

正如您所看到的,在返回配置对象之前,我想处理一些包含我需要添加到标题的其他数据的事件。
它有可能吗?

1 个答案:

答案 0 :(得分:1)

是的,您可以这样做,返回您的承诺var deferred = $q.defer();,而不是异步方法完成后,您可以解析更新后的配置:

          'request': function(config) {
            var deferred = $q.defer();
            someAsyncService.doAsyncOperation().then(function() {
                // Asynchronous operation succeeded, modify config accordingly
                ...
                deferred.resolve(config);
            }, function() {
                // Asynchronous operation failed, modify config accordingly
                ...


               deferred.resolve(config);
                });
                return deferred.promise;
            }

您可以在AngularJS Interceptors

中阅读更多内容