2016-08-31 15 views
4

私はZone.jsで作業していましたが、キャッチされていない例外のログを設定したいと思います。Zone.jsのカスタムエラーハンドラ

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

しかし、例外がプロミス内にスローされた場合、これは機能しません。 Zoneエラーハンドラの素晴らしい点は、Promisesにフックして例外を発生させることですが、実際にオーバーライドしたり、エラーハンドラを追加する方法を見つけることができません。ゾーンのプライベートフィールド。

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

+0

あなたはZone.jsスクリプトを実行する前に、 'Promise'コンストラクタへの参照を保存することができます。 –

+0

@ SoftwareEngineer171それが私にどのように役立つのか分かりません。 –

答えて

2

あなたはこのような何かを試みることができる:onHandleErrorによって指定されたカスタムハンドラで例外をキャッチし、このような出力をもたらすであろう

<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> 

:動作しないようですが

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

例外がゾーンで直接スローされた場合私は提出してこれについてissueです。

0

zone.js 0.78から約束されていない約束のエラーの場合、このAPIを使用できます。

https://github.com/angular/zone.js/pull/627

window.addEventListener("unhandledrejection", function (event) { 
    console.warn("WARNING: Unhandled promise rejection. Shame on you! Reason: " 
       + event.reason); 
}); 

window.addEventListener("rejectionhandled", function (event) { 
    console.log("Promise rejected! Reason: " + reason); 
}); 
関連する問題