gpt4 book ai didi

Angular 2 : Better/Deeper Zone Stacks for Debugging

转载 作者:太空狗 更新时间:2023-10-29 17:03:32 24 4
gpt4 key购买 nike

在 Angular2 中有没有办法为异步代码获得更好的调用堆栈?我一直认为跟踪 setTimeout()、发出的事件、Promises 等的执行上下文是 Zone 的优势之一?

我构建了一个 plunker 示例,它显示了一个常见的场景,无法跟踪错误。

我有以下示例场景:

@Component({
selector: 'my-component',
template: `
<div>
<button (click)="doSmth()">Cause an async error!</button>
</div>
`
})
export class MyComponent {
@Output() error = new EventEmitter<any>(true);

public doSmth(): void {
this.error.emit('Oh snap!');
}
}

@Component({
selector: 'my-app',
template: `
<div>
<my-component (error)="handleError($event)"></my-component>
</div>
`,
})
export class App {
private error = "";

public handleError(reason: any): void {
Promise.reject(reason)
}
}

@NgModule({
imports: [ BrowserModule ],
declarations: [ App, MyComponent ],
bootstrap: [ App ]
})
export class AppModule {}

笨蛋:https://embed.plnkr.co/rnkxRH9G0FzA3DcBHfKO/

这个片段会产生一个异步错误“Oh Snap!”单击按钮时。此错误将通过 EventEmitter 发出,该 EventEmitter 将在 App 组件中处理,这只会导致未处理的 Promise 拒绝。

我现在得到的调用栈是这样的:

Error: Oh Snap!
at resolvePromise (zone.js:538)
at Function.ZoneAwarePromise.reject (zone.js:594)
at App.handleError (app.ts:34)
at DebugAppView._View_App0._handle_error_3_0 (App.ngfactory.js:82) //not my file
at eval (core.umd.js:12718)
at eval (core.umd.js:9180)
at ZoneDelegate.invokeTask (zone.js:356)
at Object.onInvokeTask (core.umd.js:9236)
at ZoneDelegate.invokeTask (zone.js:355)
at Zone.runTask (zone.js:256)

这让我没有机会在更复杂的应用程序中追踪实际的错误触发源。

我还嵌入了“long-stack-trace-zone”脚本,完全没有效果。

问题是:我需要做什么才能获得更好的区域堆栈跟踪?或者根本不可能吗?

提前致谢。

最佳答案

解决方案是使用“Chrome DevTools”来中断异常。

为此,在 Chrome DevTools 中,您应该:

  1. Break on uncaught exceptions
  2. 使用Blackboxing为了只打破你感兴趣的代码

关于 Angular 2 : Better/Deeper Zone Stacks for Debugging,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39012652/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com