来自zone.js的角度6未捕获的异常

时间:2018-08-27 22:40:26

标签: javascript angular rxjs zone.js

我正在尝试以角度构建应用程序,但是当我的应用程序无法捕获在zone.js(版本^ 0.8.26)中引发的异常时,我遇到了问题。

我对angular还是比较陌生,但我的目标是让我的自定义ErrorHandler捕获组件和服务内部未处理的所有异常。但是由于某种原因,异常未到达我的ErrorHandler。根据我的浏览器的控制台,该异常是在zone.js(第192行)中引发的,下面是该文件的片段

try {
    if (task.type == macroTask && task.data && !task.data.isPeriodic) {
        task.cancelFn = null;
    }
    try {
        return this._zoneDelegate.invokeTask(this, task, applyThis, applyArgs);
    }
    catch (error) {
        if (this._zoneDelegate.handleError(this, error)) {
            throw error;
        }
    }
}

正在调用该错误的HTTP请求来自一个可观察的对象。这是否意味着在我的角度应用程序之外引发了异常?下面是我的代码流程。

this.xyz.getResult().subscribe(result=> {
  this.callAction(result); //this is expected to throw an HttpErrorResponse, but the exception that was raised from zone.js does not reach my ErrorHandler
});

1 个答案:

答案 0 :(得分:0)

我刚刚遇到了与您完全相同的问题,尽管我的应用程序有修复程序,但它可能不适用于您的应用程序。

因此基于您的代码:

this.xyz.getResult().subscribe(result=> {
  this.callAction(result); //this is expected to throw an HttpErrorResponse, but the exception that was raised from zone.js does not reach my ErrorHandler
});

我最初进入result的是一个字符串,例如"success"。将格式从字符串更改为JSON对象(例如{status: "success"})可以使callAction()方法正常执行。可以肯定地说,在我的情况下,异常是由外部应用程序的格式响应引起的。我无法完全理解Zone.js为何以及何时触发此错误,因为我无法始终如一地重新创建它。

可能值得注意的是,使用FireFox时,我仅收到未捕获的异常:[Object object]错误。仅当切换到Chrome时,它才会列出错误堆栈并暗示Zone.js为可疑对象。