我们有API,它在响应XML中返回错误,而不是拒绝它们并发送错误响应。所以我有下面的代码来处理,
$http({
url: apiURL,
method: "POST",
data: req,
headers: oHeaders,
dataType: "xml",
})
.success(function(data,status) {
console.log('success!!!!!');
deff.resolve(data);
})
.error(function(data,status) {
console.log('This is what I want to see!!!!!');
deff.reject(data);
});
myApp.factory('customHttpInterceptor', ['$q', function ($q) {
return function (promise) {
return promise.then(function (response) {
var parsed;
if (response.config.dataType == 'xml'){
parsed = $.xml2json(response.data);
if (parsed) {
angular.forEach(parsed, function(v, k) {
if (k == 'status') {
if (v.APIErrors) {
return $q.reject(response);
}
}
});
}
console.log(parsed);
}
return response;
}, function (errResponse) {
// do something on error
console.log('Error section in interceptor');
return $q.reject(errResponse);
});
};
}]); 我期望得到的是,当在拦截器内发现错误时,它将拒绝承诺,而控件将进入$http的错误部分并记录“这就是我想看到的!”消息。而是展示“成功!”消息。
这是工作方式还是我做错了什么?
伊什
发布于 2014-10-21 04:30:53
我在这里看到了几件似乎不对劲的事情:
在forEach中返回结果的
angular.forEach(parsed, function(v, k) {
if (k == 'status') {
if (v.APIErrors) {
return $q.reject(response);
}
}
});您编写这篇文章可能是因为您习惯于将return语句放入for循环中。这在这里不起作用,因为您是从函数体内部返回的。从不使用任何在forEach body函数中返回某些内容的理由:这个值不会被任何东西使用。
角拦截器API
也许您只是没有在代码中显示它,但是您必须注册您的拦截器。
$httpProvider.interceptors.push('customHttpInterceptor');更重要的是,您的拦截器没有正确的形式:在您的示例中,它应该是一个具有response方法的对象,它将从响应返回响应的承诺。
https://stackoverflow.com/questions/26478298
复制相似问题