У Javascript, припустимо, я хочу виконати деяку очистку, коли трапляється виняток, але нехай виняток продовжує розповсюджувати стек, наприклад:
try {
enterAwesomeMode();
doRiskyStuff(); // might throw an exception
} catch (e) {
leaveAwesomeMode();
throw e;
}
doMoreStuff();
leaveAwesomeMode();
Проблема цього коду полягає в тому, що захоплення та повторне скидання винятку призводить до втрати інформації про сліди стека до цього моменту, так що якщо виняток згодом знову потрапляє вище, вище в стеку, слід стека знижується лише до -кинути. Це смокче, оскільки це означає, що він не містить функції, яка насправді викинула виняток.
Як виявляється, спробуйте .. остаточно має таку саму поведінку, принаймні, у Chrome (тобто проблема не в тому, що саме перекидання, а в тому, що взагалі існує будь-який блок обробника винятків.)
Хтось знає про спосіб повторного скидання виключення у Javascript, але зберегти пов'язаний з ним слід стека? Якщо цього не зробити, як щодо пропозицій щодо інших способів додати безпечні для винятків оброблювачі очищення, а також фіксуючи повні сліди стека, коли відбувається виняток?
Дякую за будь-які покажчики :)