我正在尝试以角度构建应用程序,但是当我的应用程序无法捕获在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
});
答案 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为可疑对象。