AngularJS ngResource:如何始终使用相同的catch函数?

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

每次我使用$resource访问服务器时,我都希望在出现故障时向用户显示相同的警报

今天,它看起来像:

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传递给函数。