AngularJS ngResource:如何始终使用相同的catch功能?

时间:2014-05-02 01:08:54

标签: angularjs ngresource

每次使用任何$资源命中服务器时,我都希望在用户失败时向其显示相同的警报。

今天看起来像:

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);

3 个答案:

答案 0 :(得分:6)

您可以在app.config()部分使用interceptor。这将捕获源自$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); } }; }); 的所有响应错误。

{{1}}

答案 1 :(得分:1)

@kba的答案帮助我找到了路径。以下文章让我理解:

http://www.webdeveasy.com/interceptors-in-angularjs-and-useful-examples/

答案 2 :(得分:0)

只需声明一次并重复使用:

var defaultErrorHandler = function() {
  alert("try again")
}

myResource.query(...).$promise.catch(defaultErrorHandler());            
myResource.update(...).$promise.catch(defaultErrorHandler());
...