2017-09-14 6 views
0

요청을 서버에 보내기 전에 인터셉터가 어떤 이벤트를 기다릴 수 있습니까? 여기 인터셉터에서 AngularJS 이벤트 처리

는 인터셉터의 코드입니다 : 당신이 볼 수 있듯이

(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"); 
    } 
})(); 

이는 config 객체를 반환하기 전에, 내가 헤더에 추가해야하는 추가 데이터가 포함 된 몇 가지 이벤트를 처리합니다.
모두 가능합니까?

답변

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; 
      } 

더 당신은 당신의 의견에 감사드립니다

+0

AngularJS Interceptors에서 읽을 수 있습니다 마테,하지만 미안하지만 난 완전히 이해하지 못해. 서비스가 나를 어떻게 도울 수 있습니까? – ashilon

+0

서비스가 필요 없으며, config를 반환하지 않지만'promise'를 반환합니다. 그리고 이벤트가 끝날 때까지 기다렸다가 이벤트가 끝나면 업데이트 된 설정을 해결할 수 있습니다. –

+0

'promise'를 반환하지만, 실제 반환 값은이 코드에 있습니다.'deferred.resolve (config); –