In Javascript, supponiamo di voler eseguire alcune operazioni di pulizia quando si verifica un'eccezione, ma lascia che l'eccezione continui a propagarsi nello stack, ad esempio:
try {
enterAwesomeMode();
doRiskyStuff(); // might throw an exception
} catch (e) {
leaveAwesomeMode();
throw e;
}
doMoreStuff();
leaveAwesomeMode();
Il problema con questo codice è che la cattura e la ricodificazione dell'eccezione causa la perdita delle informazioni della traccia dello stack fino a quel punto, in modo tale che se l'eccezione viene successivamente catturata nuovamente, più in alto nello stack, la traccia dello stack scende solo al re -gettare. Questo fa schifo perché significa che non contiene la funzione che ha effettivamente generato l'eccezione.
A quanto pare, try..finally ha lo stesso comportamento, almeno in Chrome (ovvero, non è proprio il rilancio che è il problema, ma la presenza di qualsiasi blocco del gestore delle eccezioni).
Qualcuno conosce un modo per ricodificare un'eccezione in Javascript ma preservare la traccia dello stack ad essa associata? In caso contrario, che ne dite di suggerimenti su altri modi per aggiungere gestori di pulizia sicuri dalle eccezioni, acquisendo al contempo tracce complete dello stack quando si verifica un'eccezione?
Grazie per eventuali suggerimenti :)