W Javascript załóżmy, że chcę wykonać pewne porządki, gdy wystąpi wyjątek, ale pozwól, aby wyjątek nadal propagował stos, np:
try {
enterAwesomeMode();
doRiskyStuff(); // might throw an exception
} catch (e) {
leaveAwesomeMode();
throw e;
}
doMoreStuff();
leaveAwesomeMode();
Problem z tym kodem polega na tym, że przechwycenie i ponowne zgłoszenie wyjątku powoduje utratę informacji o śladzie stosu do tego punktu, tak że jeśli wyjątek zostanie następnie przechwycony ponownie, wyżej na stosie, ślad stosu przechodzi tylko do re -rzucać. To jest do bani, ponieważ oznacza, że nie zawiera funkcji, która faktycznie spowodowała odrzucenie wyjątku.
Jak się okazuje, try..w końcu zachowuje się tak samo, przynajmniej w Chrome (to znaczy, że to nie ponowne rzucenie jest problemem, ale obecność jakiegokolwiek bloku obsługi wyjątków).
Czy ktoś zna sposób na ponowne zgłoszenie wyjątku w Javascript, ale zachować skojarzony z nim ślad stosu? W przeciwnym razie co powiesz na sugestie dotyczące innych sposobów dodawania bezpiecznych dla wyjątków programów obsługi czyszczenia, a także przechwytywania pełnych śladów stosu, gdy wystąpi wyjątek?
Dzięki za wszelkie wskazówki :)