私の angularjs アプリでは、http エラーのデフォルト ハンドラーを次のように定義しました。
myapp.config([ '$httpProvider', function($httpProvider) {
$httpProvider.responseInterceptors.push('errorInterceptor')
}])
whereerrorInterceptor
は、現在のページの上部にあるアラート フィールドにエラーに関する詳細を表示するサービスです。
ここで、特定のエラーを別の方法で処理したい場合 (たとえば、クエリがモーダルでトリガーされ、ページ レベルではなく、このモーダルでのみアラートを表示したい):
$http.get('/my/request').then(success, specificErrorHandling)
Angular はこれを行いspecificErrorHandling
ますが、それでも my をトリガーするerrorInterceptor
ため、エラーが 2 回報告されます。それを回避する方法はありますか?
より一般的には、チェーンに沿ってまだ処理されていないエラーのみを処理するAngularの方法はありpromise
ますか?サーバーアプリのトップレベルのエラーハンドラーがキャッチされた例外を処理する必要がないのと同じ方法ですか?
編集:コメントでBeetroot-Beetrootが要求したように、インターセプターのコードは次のとおりです。
@app.factory 'errorInterceptor', [ '$q', 'alertsHandler',
($q, alertsHandler) ->
success = (response) ->
response
failure = (response) ->
alertsHandler.raise(response)
(promise) ->
promise.then success, failure
]