JavaScriptで、例外が発生したときにいくつかのクリーンアップを実行したいが、例外がスタックに伝播し続けるようにしたいとします。例:
try {
enterAwesomeMode();
doRiskyStuff(); // might throw an exception
} catch (e) {
leaveAwesomeMode();
throw e;
}
doMoreStuff();
leaveAwesomeMode();
このコードの問題は、例外をキャッチして再スローすると、その時点までのスタックトレース情報が失われるため、その後例外が再びキャッチされた場合、スタックの上位でスタックトレースがreまでしかダウンしないことです。 -スロー。これは、実際に例外をスローした関数が含まれていないことを意味するため、面倒です。
結局のところ、try..finallyは少なくともChromeで同じ動作をします(つまり、問題の原因となっているのは再スローではなく、例外ハンドラーブロックの存在です)。
誰かがJavascriptで例外を再スローする方法を知っていますが、それに関連付けられたスタックトレースを保持しますか?それができない場合、例外が発生したときに完全なスタックトレースをキャプチャしながら、例外セーフクリーンアップハンドラーを追加する他の方法の提案についてはどうでしょうか。
ポインタをありがとう:)