Wie kann ich eine Ausnahme in Javascript erneut auslösen, aber den Stack beibehalten?

Stellen Sie sich in Javascript vor, ich möchte eine Bereinigung durchführen, wenn eine Ausnahme auftritt, aber die Ausnahme soll den Stack weiter verbreiten, z. B .:

try {
  enterAwesomeMode();
  doRiskyStuff(); // might throw an exception
} catch (e) {
  leaveAwesomeMode();
  throw e;
}
doMoreStuff();
leaveAwesomeMode();

Das Problem mit diesem Code besteht darin, dass beim Abfangen und erneuten Auslösen der Ausnahme die Stapelablaufverfolgungsinformationen bis zu diesem Punkt verloren gehen. Wenn die Ausnahme anschließend weiter oben im Stapel erneut abgefangen wird, wird die Stapelablaufverfolgung nur bis zum Ende fortgesetzt erneut werfen. Das ist zum Kotzen, weil es nicht die Funktion enthält, die die Ausnahme ausgelöst hat.

Wie sich herausstellt, hat try..finally zumindest in Chrome das gleiche Verhalten (das heißt, es ist nicht der Re-Throw, der genau das Problem darstellt, sondern das Vorhandensein eines Ausnahmebehandlungsblocks überhaupt.)

Kennt jemand eine Möglichkeit, eine Ausnahme in Javascript erneut auszulösen, aber den damit verbundenen Stack-Trace beizubehalten? Wenn dies nicht der Fall ist, wie wäre es mit Vorschlägen für andere Möglichkeiten, ausnahmesichere Cleanup-Handler hinzuzufügen und gleichzeitig vollständige Stack-Traces zu erfassen, wenn eine Ausnahme auftritt?

Vielen Dank für alle Hinweise:)

Antworten auf die Frage(4)

Ihre Antwort auf die Frage