为什么在使用拦截器时将错误代码 (500) 的响应视为成功响应
Why is the response with error code (500) treated as successful response while using interceptor
我正在尝试使用 Angular 拦截器来处理我的 500
或 403
错误代码。对于其他代码,我有自定义业务实现。然而,使用拦截器似乎使 Angular 将错误响应视为成功响应,并且我在 .then
中的成功回调被调用。这不奇怪吗,考虑到文档说 200-299 代码仅被视为成功响应。
我的代码:
function appInterceptorFn(){
var interceptor = {
responseError: function (config) {
if (config && config.status === cramConfig.FORBIDDEN_ACCESS_CODE) {
$rootScope.$emit('ERROR_EVENT', config);
}
return config;
}
}
return interceptor;
}
有什么办法可以避免吗,我正在使用AngularJS v1.3.17
我已经访问过此 link,它显示了不同的实现,但我更愿意使用拦截器。
这是一个已知问题吗?
通过 returning 您的对象 "normally",您告诉 angular 将您的错误视为成功。
你必须更换你的
return config;
和
return $q.reject(config);
说明
如果您查看此处的文档:https://docs.angularjs.org/api/ng/service/$http#interceptors,您将看到以下内容:
// optional method
'responseError': function(rejection) {
// do something on error
if (canRecover(rejection)) {
return responseOrNewPromise
}
return $q.reject(rejection);
}
我知道这不是很多文档,但它告诉您,如果您 return 对象或承诺,它将解决您的错误,就好像没有错误一样。如果您希望重新抛出错误,则必须使用 $q.reject()
明确地执行此操作
我正在尝试使用 Angular 拦截器来处理我的 500
或 403
错误代码。对于其他代码,我有自定义业务实现。然而,使用拦截器似乎使 Angular 将错误响应视为成功响应,并且我在 .then
中的成功回调被调用。这不奇怪吗,考虑到文档说 200-299 代码仅被视为成功响应。
我的代码:
function appInterceptorFn(){
var interceptor = {
responseError: function (config) {
if (config && config.status === cramConfig.FORBIDDEN_ACCESS_CODE) {
$rootScope.$emit('ERROR_EVENT', config);
}
return config;
}
}
return interceptor;
}
有什么办法可以避免吗,我正在使用AngularJS v1.3.17
我已经访问过此 link,它显示了不同的实现,但我更愿意使用拦截器。
这是一个已知问题吗?
通过 returning 您的对象 "normally",您告诉 angular 将您的错误视为成功。
你必须更换你的
return config;
和
return $q.reject(config);
说明
如果您查看此处的文档:https://docs.angularjs.org/api/ng/service/$http#interceptors,您将看到以下内容:
// optional method
'responseError': function(rejection) {
// do something on error
if (canRecover(rejection)) {
return responseOrNewPromise
}
return $q.reject(rejection);
}
我知道这不是很多文档,但它告诉您,如果您 return 对象或承诺,它将解决您的错误,就好像没有错误一样。如果您希望重新抛出错误,则必须使用 $q.reject()