Angular2で非同期コードの呼び出しスタックを改善する方法はありますか?私はいつも、setTimeout()、放出されたイベント、約束などの実行コンテキストを追跡することがZoneの強みの1つだと考えましたか?Angular2:デバッグのためのより良い/より深いゾーンスタック
私はエラーをトレースすることが不可能な一般的なシナリオを示すプランナーの例を作成しました。
私は、次の例のシナリオがあります。
@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 {}
Plunker:https://embed.plnkr.co/rnkxRH9G0FzA3DcBHfKO/
このスニップは、非同期エラー作り出す "ああスナップを!"ボタンがクリックされたとき。このエラーは、未処理のPromise拒否を引き起こすAppコンポーネントで処理されるEventEmitterによって生成されます。私は、より複雑なアプリケーションで実際のエラートリガー起源をトレースする機会を与えないだろう
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」スクリプトも埋め込んでいますが、これはまったく効果がありません。
質問: ゾーンスタックのトレースを改善するにはどうすればよいですか?それとも、まったく可能ですか?
ありがとうございます。