En Javascript, supposons que je veuille effectuer un nettoyage lorsqu'une exception se produit, mais que l'exception continue à se propager dans la pile, par exemple:
try {
enterAwesomeMode();
doRiskyStuff(); // might throw an exception
} catch (e) {
leaveAwesomeMode();
throw e;
}
doMoreStuff();
leaveAwesomeMode();
Le problème avec ce code est que la capture et la relance de l'exception entraîne la perte des informations de trace de la pile jusqu'à ce point, de sorte que si l'exception est à nouveau interceptée par la suite, plus haut sur la pile, la trace de la pile ne descend que vers le re -jeter. Cela craint car cela signifie qu'il ne contient pas la fonction qui a réellement levé l'exception.
En fin de compte, try..a finalement le même comportement, au moins dans Chrome (c'est-à-dire que ce n'est pas la relance qui est précisément le problème, mais la présence d'un bloc de gestionnaire d'exceptions.)
Quelqu'un connaît-il un moyen de renvoyer une exception en Javascript mais de conserver la trace de pile qui lui est associée? À défaut, que diriez-vous des suggestions pour d'autres moyens d'ajouter des gestionnaires de nettoyage sûrs pour les exceptions, tout en capturant des traces de pile complètes lorsqu'une exception se produit?
Merci pour tous les conseils :)