Как обрабатывать ошибки $resource service в AngularJS
Я делаю запросы к моему API, и я использую модуль AngularJS $resource. Это отличается от $http, поэтому я не знаю, как обрабатывать мои ошибки.
мои услуги:
var appServices = angular.module('app.services', ['ngResource']);
appServices.factory('Category', ['$resource',
function($resource){
return $resource('/apicategoryerr/?format=:format', {}, {
query: {
method: 'GET',
params: { format: 'json'},
isArray: true,
}
});
}]);
Мой Контроллер:
...
Category.query(function(data) {
console.log(data);
});
...
Я хочу что-то подобное или .. Я не знаю, как обрабатывать ошибки, если мой API не работает..
Category.query().success(function() {
console.log('success');
}).error(function() {
console.log('error');
});
3 ответа:
вы можете передать обработчик ошибок в качестве второго параметра
query
.Category.query(function(data) {}, function() {});
EDIT:
чтобы сделать вещи немного яснее, некоторые примеры:
var Resource = $resource('/restapi/resource'); Resource.query(function(data) { // success handler }, function(error) { // error handler }); Resource.query({ 'query': 'thequery' },function(data) { // success handler }, function(error) { // error handler }); Resource.query().$promise.then(function(data) { // success handler }, function(error) { // error handler }); Resource.query({ 'query': 'thequery' }).$promise.then(function(data) { // success handler }, function(error) { // error handler });
вы можете определить обработчик ошибок на этапе создания ресурса путем добавления
interceptor
объект в описании метода, сresponseError
свойство, связанное с вашей функцией ошибки.function resourceErrorHandler(response) { ... } $resource('/path/:param/', {} , { 'get': {method:'GET', interceptor : {responseError : resourceErrorHandler}}, 'save': {method:'POST'}, 'query': {method:'GET', isArray:true, interceptor : {responseError : resourceErrorHandler}}, 'remove': {method:'DELETE'}, 'delete': {method:'DELETE'} };
здесь
resourceErrorHandler
- это функция, вызываемая при каждой ошибке метода get или query. Для заданной проблемы метод get является единственным необходимым. Конечно, вы можете применить это к любому действию.другое перехватчик
response
существует для $ resource, чтобы поймать нормальный ответ.{'get': {method:'GET', interceptor : {response : resourceResponseHandler}},
перехватчики являются частью
$http
модуль, вы можете в дальнейшем читайте о них в своих документах.
вот новый пример ES6 (я использую TypeScript) на моем ng.ресурс
resolve: { detail: function (myService, $stateParams) { return myService.getEventDetail({ id: $stateParams.id }).$promise.then(data => data, error => false ); } }
а затем в моем контроллере, "деталь" вводится в контроллер будет либо разрешить данные (хорошо) или false для ошибки, где я обрабатываю дисплей 404.