Вам нужно добавить responseInterceptors
внутрь себя $httpProvider
на этапе настройки angular. Этот перехватчик вызывается после обработки ответа angular $httpProvider
.
КОД
module.config(['$httpProvider', function($httpProvider) {
var interceptor = ['$rootScope', '$q', '$location', function(scope, $q, $location) {
function success(response) {
return response;
}
function error(response) {
var status = response.status;
if (status == 500) {
alert("Internal Server Error")
return;
}
if (status == 404) {
alert("Page not found")
return;
}
// otherwise
return $q.reject(responseInterceptors);
}
return function(promise) {
return promise.then(success, error);
}
}];
$httpProvider.responseInterceptors.push(interceptor);
}]);
Приведенный выше код предоставит вам лучший контроль над обработкой ошибок, когда какой-либо запрос не выполняется.
Для получения дополнительной информации см. эту ответ.
Обновить
Для отображения предупреждения только после того, как мы могли бы создать службу, если произошла ошибка, которая будет обрабатывать установленную переменную ошибки.
Сервис
module.service('errorService',function(){
//getter
this.getErrorFlag = function(){
return this.isError;
}
//setter
this.setErrorFlag = function(val){
this.isError = val;
}
});
Перехватчик
module.config(['$httpProvider', function($httpProvider) {
var interceptor = ['$rootScope', '$q', '$location','errorService', function(scope, $q, $location,errorService) {
function success(response) {
return response;
}
function error(response) {
//setting error variable
errorService.setErrorFlag(true)
return $q.reject(responseInterceptors);
}
return function(promise) {
return promise.then(success, error);
}
}];
$httpProvider.responseInterceptors.push(interceptor);
}]);
Внутри вашего контроллера поместите все обещания вызовов $http
внутри $q.all, и когда обещания будут разрешены, проверьте флаг isError
для errorService
. Флаг IsError
будет истинным, если ошибка произошла хотя бы один раз, и с его помощью вы можете показать ошибку только один раз.
Контроллер
module.controller('appCtrl',['$scope','$q','errorService',function($scope,$q,errorService){
var ajax1 = $http.get('url').then(function(){
},
function(){
});
var ajax2 = $http.get('url').then(function(){
},
function(){
});
var ajax3 = $http.get('url').then(function(){
},
function(){
});
errorService.setErrorFlag(false);
$q.all(ajax1, ajax2, ajax3).then(function(data){
//check for isError flag from service
if(errorService.getErrorFlag())
alert('Error occurred while processing request.'); //this will show only once
else
alert('No error occurred while processing request.')
});
}]);
Надеюсь, это поможет вам. Спасибо.
person
Pankaj Parkar
schedule
07.02.2015