in JavaScript, supponiamo che io voglio per eseguire alcune di pulizia quando un'eccezione accade, ma lasciate l'eccezione continuano a propagarsi lo stack, ad esempio:Come posso rilanciare un'eccezione in Javascript, ma preservare lo stack?
try {
enterAwesomeMode();
doRiskyStuff(); // might throw an exception
} catch (e) {
leaveAwesomeMode();
throw e;
}
doMoreStuff();
leaveAwesomeMode();
Il problema con questo codice è che la cattura e rethrowing le cause di eccezione le informazioni di traccia dello stack fino a quel punto vanno perse, in modo che se l'eccezione viene successivamente catturata di nuovo, più in alto nello stack, la traccia dello stack si riduce solo al rilancio. Questo fa schifo perché significa che non contiene la funzione che ha effettivamente gettato l'eccezione.
Come si è visto, ha try..finally lo stesso comportamento, in almeno Chrome (cioè, non è ri-throw che è il problema precisamente, ma la presenza di un blocco gestore di eccezioni affatto.)
Qualcuno sa di un modo per rilanciare un'eccezione in Javascript ma preservare la traccia dello stack ad essa associata? In caso contrario, per quanto riguarda i suggerimenti per altri modi per aggiungere gestori di cleanup sicuri per l'eccezione, mentre si acquisiscono anche tracce dello stack complete quando si verifica un'eccezione?
Grazie per tutti i puntatori :)
0x3a28213a - in attesa di mio grazie ;-) – bacar
Dupe: https://stackoverflow.com/questions/5249960/javascript-rethrowing-an-exception-preserving-the-stack-trace – MatthewMartin
Questa domanda dovrebbe essere chiuso perché si riferisce a un bug di Chrome risolto nel 2012. –