在我的 angularjs 应用程序中,我以这种方式为 http 错误定义了一个默认处理程序:
myapp.config([ '$httpProvider', function($httpProvider) {
$httpProvider.responseInterceptors.push('errorInterceptor')
}])
whereerrorInterceptor
是一项服务,它在当前页面顶部的警报字段中显示有关错误的一些详细信息。
现在,当我想以不同的方式处理特定错误时(比如查询是在模式中触发的,并且我想仅在此模式中显示警报,而不是在页面级别):
$http.get('/my/request').then(success, specificErrorHandling)
Angular 会specificErrorHandling
触发但仍会触发 my errorInterceptor
,因此我的错误会被报告两次。有没有办法避免这种情况?
更一般地说,是否有一种 Angular 方法来仅处理promise
链中尚未处理的错误,就像服务器应用程序的顶级错误处理程序不必处理捕获的异常一样?
编辑:根据 Beetroot-Beetroot 在评论中的要求,这是我的拦截器的代码:
@app.factory 'errorInterceptor', [ '$q', 'alertsHandler',
($q, alertsHandler) ->
success = (response) ->
response
failure = (response) ->
alertsHandler.raise(response)
(promise) ->
promise.then success, failure
]