我正在尝试使用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,它显示了不同的实现,但我想优先使用拦截器。
这是一个已知问题吗?
答案 0 :(得分:2)
通过返回您的对象"通常",您告诉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);
}
我知道它不是很多文档,但是它告诉你如果你返回一个对象或一个promise,它会解决你的错误,好像没有错误一样。如果您希望重新抛出错误,则必须使用$q.reject()