7

Zone.js を使用しており、キャッチされていない例外のログを設定したいと考えています。次のように、エラー ハンドラを設定できます。

window.onerror = function(e) { 
    //send an error report to the server
}

ただし、Promise 内で例外がスローされた場合、これは機能しません。Zone エラー ハンドラーの良いところは、それが Promises にフックされ、それらの例外に対して発火することですが、Zone が作成された後にエラー ハンドラーを実際にオーバーライドまたは追加する方法が見つかりません。ゾーンのプライベート フィールド。

エラーハンドラーを更新するために使用できるゾーン用の実際の API はありますか、またはルートゾーンが構築されているポリフィルを変更するか、プライベートフィールドなどを上書きする必要がありますか?

4

3 に答える 3

2

次のようなことを試すことができます:

<html>
<head>
<script src="https://unpkg.com/zone.js?main=browser"></script>
<script>
Zone.current.fork({
    onHandleError: function(parentZoneDelegate, currentZone, targetZone, error) {
        console.log("Error handled by zone: " + error);
    }
}).run(function () {
    setTimeout(function () {
        console.log("In zone setTimeout")
        throw new Error("Throw in zone setTimeout"); 
    }, 0);
    console.log("Directly in zone");
});
</script>
</head>
<body>
</body>
</html>

で指定されたカスタムハンドラーで例外をキャッチし、次のonHandleErrorような出力を生成します。

Directly in zone (test1.html:14)
In zone setTimeout (test1.html:11 )
Error handled by zone: Error: Throw in zone setTimeout (test1.html:7)

ただし、例外がゾーンで直接スローされると機能しないようです。私はこれについて提出し、発行しました。

于 2016-09-07T17:34:35.653 に答える