2

У меня есть следующий код:Угловой перехватчик ответ не работает для RestAngular

!(function(window, angular){ 
    'use strict'; 
    angular.module('interceptor', ['settings']). 
     config(function($httpProvider, $injector){ 
      var $http, 
       interceptor = ['$q', '$injector', function ($q, $injector) { 
        var error; 
        function success(response) { 
         var $http = $http || $injector.get('$http'); 
         var $timeout = $timeout || $injector.get('$timeout'); 
         var $rootScope = $rootScope || $injector.get('$rootScope'); 
         var LOADER_CONF = LOADER_CONF || $injector.get('LOADER_CONF'); 
         if($http.pendingRequests.length < 1) { 
          $timeout(function(){ 
           if($http.pendingRequests.length < 1){ 
            $rootScope._loading = false; 
           } 
          }, LOADER_CONF.SUSPEND_ON); 
         } 
         else{ 
          $timeout(function(){ 
           if($http.pendingRequests.length > 0){ 
            $rootScope._loading = true; 
           } 
          }, LOADER_CONF.SUSPEND_OFF); 
         } 
         return response; 
        } 

        function error(response) { 
         var $state = $state || $injector.get("$state"); 
         var $timeout = $timeout || $injector.get('$timeout'); 
         var $rootScope = $rootScope || $injector.get('$rootScope'); 
         var LOADER_CONF = LOADER_CONF || $injector.get('LOADER_CONF'); 
         $timeout(function(){ $rootScope._loading = false, LOADER_CONF.SUSPEND_OFF}); 
         return $q.reject(response); 
        } 

        return function (promise) { 
         return promise.then(success, error); 
        } 
       }]; 

      $httpProvider.responseInterceptors.push(interceptor); 
     }); 
})(window, window.angular); 

основной перехватчик для переключения на блесну.

Перехватчик отлично подходит для HTTP-запросов, которые извлекают частичные и внутренние угловые данные, но не работает для запросов RestAngular (который является оберткой для $ http).

Любая помощь очень ценится.

ответ

1

Возможно, что перехват ретрансляции не работает из-за обещаний. попробуйте использовать $ q так:

var interceptor = ['$rootScope', '$q', function ($rootScope, $q) { 
    return { 
    'request': function(config) { 
     console.log("request successful"); 
     return config || $q.when(config); 
    }, 
    'requestError': function(rejection) { 
     console.log("request error"); 
     return $q.reject(rejection); 
    }, 
    'response': function(response) { 
     console.log("response successful"); 
     return response || $q.when(response); 
    }, 
    'responseError' : function(rejection) { 
     console.log(rejection.status+" something bad happened"); 
     $rootScope.errors = ["Unable to connect to server "+rejection.config.url]; 

     return $q.reject(rejection); 
    } 
    }; 

}]; 
+0

Попробуем и обновим, спасибо :) –