0

Я планировал создать настраиваемое предупреждающее сообщение в соответствии с кодами ошибок. Так что я должен получить коды ошибок при отправке запроса на сервер и получении ответа от сервера.

500 - Некоторые вещи поступили не так. 403- произошла техническая ошибка; 401 - Файл не найден. 400- несанкционированного доступ:

В приложении, я могу захватить код ошибки в httpinterceptor ответ , но я не в состоянии захватить код ошибки в отсроченных обещаниях.

var app = angular.module('myApp', []); 

app.run(); 

контроллер:

var app = angular.module('myApp', []); 

app.run(); 

app.controller('myController', ['$scope', 'myService', function ($scope, myService) { 
    var myCtrl = this; 
    myCtrl.EmployeeList = []; 
    myService.getData().then(function (data,status) { 
     myCtrl.EmployeeList = data; 
     console.log(status); 
    }), (function (data, status) { 
     if (status === 500) { 
      toastr.warn("technical error occurred"); 
     } 
     else if (status === 400) { 

      toastr.warn("something went wrong"); 
     } 
    }); 
}]); 

var app = angular.module('myApp'); 

app.factory('myService', ['$http', '$q', function ($http, $q) { 
    var fact = {}; 
fact.getData = function() { 
    var deferred = $q.defer(); 
    //$http.get('/Test/getData', 


    $http.get('http://simpleApiEarl.azurewebsites.net/api/envelopes', 
     { 
      cache: true 
     }) 
     .then(function (response) { 
      if (typeof response.data === 'object') 
      { 
       deferred.resolve(response.data); 
      } 
      else 
      { 
       debugger; 
       deferred.reject(response.data); 

       console.log("Error:" +response.status); 
      } 
     }, function (response, status) { 

      console.log(response.status); 
      deferred.reject(response.data,status); 
     }); 
    return deferred.promise; 
} 

return fact; 
}]); 

Работа в interceptor:

var interceptor = function ($q, $rootScope) { 

     return { 
      request: function (config) { 
       console.log(config); 
       return config; 
      }, 

      response: function (response) { 
       var deferred = $q.defer(); 

       return response || $q.when(response); 
      }, 
      responseError: function (rejection) { 
       if (rejection.status == 500) 
       { 

        alert('Bad Request Processed'); 

        return $q.reject(rejection); 


       } 


if(rejection.status == 403) 

{ 
    alert('some thing went wrong'); 
} 
      } 
     } 
    }; 

$httpProvider.interceptors.push(interceptor); 

проблема: Почему я не в состоянии захватить код ошибки в отсроченных обещаниям отбросим ответ ?

Скриншот:

Перед отправкой вызова службы:

enter image description here

После отвержение получения статуса 0 enter image description here

В консоли. enter image description here

ответ

0

Перед тем, как deferred.reject(response.data, status), попробуйте console.log(response). Изучите его в своем коде, и вы должны найти свой код ошибки.

Если хотите, разместите снимок журнала консоли.

Из того, что я вижу в вашем коде, заменить условия этим:

if(data.status == 500) toastr.warn("technical error occurred"); 
else if(data.status == 400) toastr.warn("something went wrong"); 

И в службе, прекратить отправку обратно response.data:

deferred.reject(response,status); 
+0

я получаю код ошибки в httpinterceptors, но я не получаю в ответ на ошибку отклонения $ q. обновили скриншот. –

+0

Хорошо, я вижу, теперь открываются каждый каждый объект в 'response', такой как' config', 'headers' ... И у вас есть ошибка CORS, а это означает, что вы не установили свой' Access-Control-Allow-Origin 'header в вашем сервере. Вы знаете эту ошибку или нет? – trichetriche

+0

Я знаю ошибку, я помещаю этот url для отображения кода ошибки. Мой вопрос не способен зафиксировать код ошибки в $ q rejection, его статус показывает как 0, а для 403. этот код ошибки способен захватывать в httpinterceptor , почему я не могу его захватить. –