Zone.js中的自定义错误处理程序

Owe*_* K. 7 javascript typescript zonejs angular

我一直在使用Zone.js,我想为任何未捕获的异常设置日志记录.我可以设置一个错误处理程序,如下所示:

window.onerror = function(e) { 
    //send an error report to the server
}
Run Code Online (Sandbox Code Playgroud)

但是如果在Promise中抛出异常,这将不起作用.关于Zone错误处理程序的好处是它挂钩到Promises并为它们中的异常触发,但是在创建区域之后我找不到实际覆盖或添加错误处理程序的方法,而不是覆盖一堆区域内的私人田地.

是否有可用于更新错误处理程序的区域的实际API,或者我是否必须更改构建根区域的polyfill或覆盖私有字段或类似的东西?

Jon*_*llo 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>
Run Code Online (Sandbox Code Playgroud)

这将捕获由 指定的自定义处理程序中的异常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)
Run Code Online (Sandbox Code Playgroud)

然而,如果直接在区域中抛出异常,它似乎不起作用。我已就此提交并发出问题。