Перехватчик ответа Angular не работает для 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).

Любая помощь горячо приветствуется.


person Oleg Belousov    schedule 16.09.2014    source источник


Ответы (1)


возможно, перехват Restangular не работает из-за промисов. попробуйте использовать $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);
    }
  };

}];
person muhr    schedule 28.10.2014