在JavaScript中,假设我想在异常发生时执行一些清理操作,但是让异常继续向上传播,例如:
事实证明,在至少Chrome中,try..finally具有相同的行为(也就是说,不是重新抛出异常导致问题,而是存在任何异常处理程序块)。
有人知道如何在JavaScript中重新抛出异常但保留与其关联的堆栈跟踪吗?如果失败,你有没有其他建议以添加异常安全清理处理程序,同时在发生异常时捕获完整的堆栈跟踪?
感谢任何指针 :)
try {
enterAwesomeMode();
doRiskyStuff(); // might throw an exception
} catch (e) {
leaveAwesomeMode();
throw e;
}
doMoreStuff();
leaveAwesomeMode();
这段代码的问题在于捕获并重新抛出异常会导致到那个点为止的堆栈跟踪信息丢失,因此如果异常随后被再次高层次地捕获,堆栈跟踪仅向下到达重新抛出语句。这很糟糕,因为它意味着它不包含实际引发异常的函数。事实证明,在至少Chrome中,try..finally具有相同的行为(也就是说,不是重新抛出异常导致问题,而是存在任何异常处理程序块)。
有人知道如何在JavaScript中重新抛出异常但保留与其关联的堆栈跟踪吗?如果失败,你有没有其他建议以添加异常安全清理处理程序,同时在发生异常时捕获完整的堆栈跟踪?
感谢任何指针 :)