В моем приложении 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 в комментариях, вот код для моего перехватчика:
@app.factory 'errorInterceptor', [ '$q', 'alertsHandler',
($q, alertsHandler) ->
success = (response) ->
response
failure = (response) ->
alertsHandler.raise(response)
(promise) ->
promise.then success, failure
]