我正在尝试编写一个异常处理程序,该处理程序将在遇到错误时记录堆栈跟踪。错误对象无法正确返回堆栈。以下片段演示了该问题:
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'angular-error-stack';
runTest() {
try {
let invalidJson = 'invalid json';
let someObject = JSON.parse(invalidJson);
}
catch(error) {
console.log('----- error and error.stack are not the same! -----');
console.log('------------------------------------------');
console.log('Stack: ', error.stack);
console.log('------------------------------------------');
console.log('Error', error);
console.log('------------------------------------------');
}
}
}
当我运行上面的命令时,我得到了不同的结果。 console.log(error.stack)不包含与console.log(error)相同的信息。
console.log(error.stack)显示发生在以下位置的错误:
AppComponent.runTest (http://localhost:4220/main.js:102:35)
console.log(error)显示发生在以下位置的错误:
AppComponent.runTest (app.component.ts:14)
如何获取正确的堆栈跟踪?
上面的代码段产生以下输出:
堆栈:SyntaxError:JSON中位置0处的意外令牌i 在JSON.parse() 在AppComponent.runTest(http://localhost:4220/main.js:102:35) 在Object.eval [作为handleEvent](ng:///AppModule/AppComponent.ngfactory.js:15:27) 在handleEvent(http://localhost:4220/vendor.js:74619:122) 在callWithDebugContext(http://localhost:4220/vendor.js:76238:27) 在Object.debugHandleEvent [作为handleEvent](http://localhost:4220/vendor.js:75873:12) 在dispatchEvent(http://localhost:4220/vendor.js:61706:25) 在http://localhost:4220/vendor.js:73551:16 在HTMLButtonElement。 (http://localhost:4220/vendor.js:79297:38) 在ZoneDelegate.invokeTask(http://localhost:4220/polyfills.js:3397:31)
错误:SyntaxError:JSON中位置0处的意外令牌i 在JSON.parse() 在AppComponent.runTest(app.component.ts:14) 在Object.eval [作为handleEvent](AppComponent.html:3) 在handleEvent(core.js:43992) 在callWithDebugContext(core.js:45631) 在Object.debugHandleEvent [作为handleEvent](core.js:45246) 在dispatchEvent(core.js:29803) 在core.js:42924 在HTMLButtonElement。 (platform-browser.js:2668) 在ZoneDelegate.invokeTask(zone-evergreen.js:391)