给定以下两个$resource
示例:
var exampleOne = $resource('/path').save(objectOne);
exampleOne.$promise.then(function (success) {}, function (error) {});
var exampleTwo = $resource('/path').save(objectTwo);
exampleTwo.$promise.then(function (success) {});
[注意:示例 2 不包含错误处理程序]
还有一个位于所有$http
请求下方的拦截器:
var interceptor = ['$location', '$q', function ($location, $q) {
function error(response) {
if (response.status === 400) {
return $q.reject(response);
}
else {
$location.path('/error/page');
}
return $q.reject(response);
}
return {
'responseError': error
};
}
$httpProvider.interceptors.push(interceptor);
$promise.then()
当示例资源不包含错误回调时,如何使拦截器不拒绝?如果回调存在,exampleOne
那么我希望拒绝,但如果不存在,exampleTwo
那么我希望重定向到错误页面,从而将条件更改为:
if (response.status === 400 && $q.unresolvedPromises.doIndeedExist()) { ...
为什么?因为我的项目中只有某些情况需要400
以用户友好的方式处理,因此我想消除许多重复的错误回调或不得不在拦截器中放置一个不常见情况的列表。我希望拦截器能够根据承诺链中另一个处理程序的存在做出决定。