Чтобы продолжить ответ @boindiil. У меня обычно так:
angular.module('someModule', [])
.factory('httpInterceptorService', ['$q', httpInterceptorService])
.config(['$httpProvider', interceptorConfig]);
function httpInterceptorService($q) {
var service = {
request: request,
responseError: responseError
};
return service;
function request(config) {
// do some logic
return config;
}
function responseError(rejection) {
if (rejection.status === 401) {
// they were unauthorised.
}
return $q.reject(rejection);
}
}
function interceptorConfig ($httpProvider) {
$httpProvider.interceptors.push('httpInterceptorService');
}
Здесь он более разрознен. И вы можете видеть, как легко вы можете добавить больше перехватчиков в конвейер. Очевидно, вы можете вводить все, что вам нравится, в httpInterceptorService
, например, в $rootScope
.
Просто будьте осторожны, не создавайте циклических зависимостей.
Мне нравится то, что прокомментировал @pankajparkar, поддерживая правильный стек вызовов.
Вы можете сделать это вместо использования перехватчиков (как они есть для каждого запроса).
angular.module('someModule', [])
.factory('mainService', ['$http', '$rootScope', '$q', mainService])
.controller('MainCtrl', ['mainService', mainCtrl]);
function mainService($http, $rootScope, $q) {
var service = {
getThings: getThings
};
var serviceBase = '/Api/Things';
return service;
function getThings() {
var deferred = $q.defer();
$http.get(serviceBase).then(function (data) {
if (data.data.someVariable == $rootScope.someVariable) {
deferred.resolve(data.data);
} else {
deferred.reject(data);
}
}).catch(function (message) {
deferred.reject(message);
});
return deferred.promise;
}
}
function mainCtrl(mainService) {
var vm = this;
vm.httpData = {};
mainService.getThings().then(function (data) {
vm.httpData = data;
}, function (message) {
// do something with the error.
});
}
person
Callum Linington
schedule
25.02.2015
.then()
для поддержания правильного стека вызовов, вызывая один за другим - person Pankaj Parkar   schedule 25.02.2015