私のカスタム例外Handlerは、例外が発生するたびに(https://docs.angularjs.org/api/ng/service/ $ exceptionHandlerの例に似ています)、いつでも$http
以上のロギングイベントを送信しています。
angular.
module('exceptionOverwrite', []).
factory('$exceptionHandler', ['$log', '$http', function($log, $http) {
return function myExceptionHandler(exception, cause) {
$http.post('myUrl.com/logErrors', cause);
$log.warn(exception, cause);
};
}]);
これは、そうでない場合を除き...希望通りに動作します
問題:
角度の用途がビューにコントローラからのロジックをバインドするをデータバインディング。しかし、これはこの星座に無限大のループを引き起こしているようです。
- このようにビューにバインドされた関数でエラーが発生すると、Exceptionハンドラがトリガされます(必要に応じて)。
- ロギングイベントは
- $ http経由で送信されるサーバーがで応答し、いくつかのHTTPステータスコード
- AngularJSは$ HTTP応答で私のビューを更新しようと
$apply
を呼び出します(!!) - すべてビューにバインドされた関数が再評価される
- ステップ1の例外を引き起こした条件が今までに魔法上消えない限り、別の例外がスローされ、ステップ1からやり直す。
質問:
がどのように私は、サーバーが応答$apply
を行ってから$http
を防ぐことができますか?この場合、単純な火災と忘却の仕組みでは十分ではないでしょう。私はサーバーレスポンスについては気にしません。
私は間違っているのですか(またはループの原因を誤解しましたか)?これは基本的にカスタムexceptionHandlerのための角度文書からの基本例なので、私は非常に一般的な用途でこのクラッシュがなぜ発生するのか本当に混乱しています。
<div ng-bind="service.calculate()"></div>
そして、それは、各ダイジェストサイクルを実行して、エラーを生成します。
$ hhtを使用しない、xHtmlRequestを使用するJS –
通話にAngularを使用しないでください。またはHTTPエラーをチェックしてエラーエンドポイントへの呼び出しでないことを確認してから別のエラーを送信しますか? – epascarello
@epascarello私はあなたがそれによって何を意味するのか分かりません。エラーエンドポイントへの呼び出しが望まれるかどうかをどのように判断しますか? (通常、要求された動作が要求を送信しています!) –