我计划根据错误代码创建自定义提醒消息。 因此,我必须在将请求发送到服务器并从服务器获取响应时获取错误代码。
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);
问题: 为什么我无法在延期承诺的拒绝响应中捕获错误代码?
截图:
在发送服务电话之前:
答案 0 :(得分: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);