En Javascript, supposons que je veux effectuer un nettoyage lorsqu'une exception se produit, mais laisse l'exception continuer à propager la pile, par exemple:Comment puis-je renvoyer une exception dans Javascript, mais conserver la pile?
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 rethrowing les causes d'exception les informations de trace de la pile jusqu'à ce point sont perdues, de sorte que si l'exception est reprise plus tard, plus haut sur la pile, la trace de la pile ne descend que jusqu'à la relance. Cela craint parce que cela signifie qu'il ne contient pas la fonction qui a réellement jeté l'exception. Comme il s'avère, try..finally a le même comportement, dans au moins Chrome (c'est-à-dire que ce n'est pas le re-throw qui est précisément le problème, mais la présence d'un bloc de gestionnaire d'exception).
Est-ce que quelqu'un connaît un moyen de réécrire une exception dans Javascript, mais conserve la trace de la pile qui lui est associée? A défaut, que diriez-vous des suggestions pour d'autres façons d'ajouter des gestionnaires de nettoyage sans exception, tout en capturant des traces de pile complètes lorsqu'une exception se produit?
Merci pour tous les pointeurs :)
0x3a28213a - avec impatience mes remerciements – bacar
Dupe: https://stackoverflow.com/questions/5249960/javascript-rethrowing-an-exception-preserving-the-stack-trace – MatthewMartin
Cette question devrait être fermée parce que il fait référence à un bug de Chrome corrigé en 2012. –