【发布时间】:2014-10-07 06:38:45
【问题描述】:
给定以下两个$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) {});
[注意:示例二不包含错误处理程序]
还有一个位于所有$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,因此我想消除许多重复的错误回调或不得不在拦截器中放置一个不常见情况的列表。我希望拦截器能够根据承诺链中另一个处理程序的存在来做出决定。
【问题讨论】:
标签: javascript angularjs promise angular-http-interceptors