Как мне получить/перехватить код состояния ответа из get API

#angularjs

Вопрос:

Ниже приведен код

 UserService.api.getProfile({userLogin: $scope.login}, function(res) {
            _.each($scope.visibility, function(e) {
                e.visible = (_.find(res, { 'roleName': e.name })) ? true : false;
            });
        });
 

А для UserService.api.getProfile будет таким, как показано ниже

 angular.module('frontendApp').factory('UserService', [
'$resource',
function($resource) {
    return {
        api: $resource('service/authority-roles/:roleId', {}, {
            getProfile: {
                method: 'GET',
                url: 'service/user/:userLogin/authority-roles',
                isArray: true
            }
 

Это хорошо работает, если API отправляет ответ 200. Однако, когда API возвращает ответ 404, код не может уловить состояние.

Я пытался использовать «Попробовать» и «Поймать», но это не работает. Я тоже утешал.войдите в res.status, чтобы получить код состояния, но значение не определено.

План состоит в том, что если API вернет 400 ответов, то предупредит сообщение «Пользователь не найден».

Ценю вашу помощь в этом. Заранее спасибо.

Комментарии:

1. Нам нужно увидеть реализацию UserService.api.getProfile() , прежде чем мы сможем сказать, но я предполагаю, что есть третий параметр, который принимает функцию обратного вызова сбоя.

2. Привет @JacobStamm Я включил getProfile выше.

Ответ №1:

Предполагая, что у вас нет глобальных $http перехватчиков, которые будут обрабатывать это, вы можете сделать это для каждого метода api, указав interceptor объект в своем getProfile действии, например:

 getProfile: {
  method: 'GET',
  url: 'service/user/:userLogin/authority-roles',
  isArray: true,
  interceptor: {
    responseError: function(rejection) {
      // do something on error
      return $q.reject(rejection);
    }
  }
}
 

Вы можете прочитать больше о перехватчиках здесь.

Комментарии:

1. Это работает!!! большое вам спасибо, это очень полезно. Разберемся дальше по перехватчикам