【发布时间】:2013-06-19 22:12:12
【问题描述】:
在我的 angularjs 应用程序中,我以这种方式为 http 错误定义了一个默认处理程序:
myapp.config([ '$httpProvider', function($httpProvider) {
$httpProvider.responseInterceptors.push('errorInterceptor')
}])
其中errorInterceptor 是一项服务,可在当前页面顶部的警报字段中显示有关错误的一些详细信息。
现在,当我想以不同的方式处理特定错误时(比如查询是在模态中触发的,并且我想仅在此模态中显示警报,而不是在页面级别):
$http.get('/my/request').then(success, specificErrorHandling)
Angular 执行了specificErrorHandling,但仍然触发了我的errorInterceptor,因此我的错误被报告了两次。有没有办法避免这种情况?
更一般地说,是否有一种 Angular 方法来仅处理 promise 链中尚未处理的错误,就像服务器应用程序的顶级错误处理程序不必处理捕获的一样例外?
编辑:根据 Beetroot-Beetroot 在 cmets 中的要求,这是我的拦截器的代码:
@app.factory 'errorInterceptor', [ '$q', 'alertsHandler',
($q, alertsHandler) ->
success = (response) ->
response
failure = (response) ->
alertsHandler.raise(response)
(promise) ->
promise.then success, failure
]
【问题讨论】:
-
你能发布一个(简化版的)errorInterceptor吗?
-
我认为显示来自拦截器的警报不是一个好主意,我认为没有办法实现这一点(可能是我错了)
-
具体如何处理错误并不是重要的部分。它实际上是关于有一个默认的错误处理,所以你不必为 100% 的异步调用实现一个特定的错误处理程序,并且当你实现一个特定的处理时能够化解它。很像例外。有没有比拦截器更好的方法来实现默认错误处理程序?
标签: javascript angularjs error-handling promise