В моем приложении 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
]