En Javascript, suponga que quiero realizar una limpieza cuando ocurre una excepción, pero deje que la excepción continúe propagándose en la pila, por ejemplo:
try {
enterAwesomeMode();
doRiskyStuff(); // might throw an exception
} catch (e) {
leaveAwesomeMode();
throw e;
}
doMoreStuff();
leaveAwesomeMode();
El problema con este código es que capturar y volver a lanzar la excepción hace que se pierda la información de rastreo de la pila hasta ese punto, de modo que si la excepción se captura nuevamente, más arriba en la pila, la traza de la pila solo baja a la re -lanzar. Esto apesta porque significa que no contiene la función que realmente arrojó la excepción.
Como resultado, intentar ... finalmente tiene el mismo comportamiento, al menos en Chrome (es decir, no es el relanzamiento el problema precisamente, sino la presencia de cualquier bloqueo de controlador de excepción).
¿Alguien sabe de una manera de volver a lanzar una excepción en Javascript pero preservar el seguimiento de la pila asociada a él? De lo contrario, ¿qué tal sugerencias para otras formas de agregar controladores de limpieza seguros para excepciones, mientras que también captura rastros completos de la pila cuando ocurre una excepción?
Gracias por cualquier puntero :)