AngularJS ngResource:如何始终使用相同的catch函数?
每次我使用$resource访问服务器时,我都希望在出现故障时向用户显示相同的警报 今天,它看起来像:AngularJS ngResource:如何始终使用相同的catch函数?,angularjs,ngresource,Angularjs,Ngresource,每次我使用$resource访问服务器时,我都希望在出现故障时向用户显示相同的警报 今天,它看起来像: function tryAgain() { alert("try again") } myResource.query().$promise.catch(tryAgain); myResource.update(...).$promise.catch(tryAgain); myResource.delete(...).$promise.catch(tryAgain); otherResourc
function tryAgain() { alert("try again") }
myResource.query().$promise.catch(tryAgain);
myResource.update(...).$promise.catch(tryAgain);
myResource.delete(...).$promise.catch(tryAgain);
otherResource.query().$promise.catch(tryAgain);
有没有办法为ngResource配置默认错误处理功能?我要找的东西是:
$resource.somethingMagicHere.defaults.catch(tryAgain);
只需声明一次并重新使用:
var defaultErrorHandler = function() {
alert("try again")
}
myResource.query(...).$promise.catch(defaultErrorHandler());
myResource.update(...).$promise.catch(defaultErrorHandler());
...
您可以在app.config()
部分中使用。这将捕获来自$http
的所有响应错误,$resource
使用这些错误
$httpProvider.interceptors.push(function($q) {
return {
'responseError': function(response) {
if (response.status == 401) {
// Handle 401 error code
}
if (response.status == 500) {
// Handle 500 error code
}
// Always reject (or resolve) the deferred you're given
return $q.reject(response);
}
};
});
@kba的答案帮助我找到了道路。下面的文章让我明白了这一点:
事实上,这就是我今天所拥有的。这看起来不太好,因为我必须经常重复代码。我正在寻找类似于配置ng-rsource的默认行为的东西。好吧,在您的示例中,您复制了该函数。当您全局定义它时,您可以在一个地方维护它。我不知道
ngResource
的默认错误处理程序。很抱歉一开始不清楚。我已经更新了我的问题。不过,谢谢你的帮助。我想你不应该调用它,只要将它作为“引用”传递,myResource.query(…).$promise.catch(defaultErrorHandler);它会在异常时自动调用,不是吗?它成功了。谢谢我没有把$injector传递给函数。