如何在 JavaScript 中重新抛出异常,但保留堆栈?
每当抛出异常时,堆栈跟踪都会传达部分数据。堆栈跟踪是程序中使用的所有方法的集合。它以引发异常的方法开始,以捕获异常的方法结束。如果重新抛出异常,堆栈跟踪将在当前方法处重新启动。因此,抛出异常的方法和当前方法之间的方法调用列表会丢失。避免这种情况的一种方法是捕获错误并将其存储在本地,然后重新抛出错误。但是,在 JavaScript 中,没有 rethrow()函数。于是我们就抛出了原来的错误。要了解上述上下文,请参阅以下示例。
示例 1:在课堂测试中,Radha 应该回答老师提出的问题。老师给 Radha 一个数字,并询问她给定的数字是否是有效的日期,如果是,则指定相应的日期。如果给定的日期编号无效,Radha 应该回答“无效的日期编号”。如果我们运行代码,嵌入页面将显示堆栈跟踪。它将显示错误源自 day(),然后在 month() 重新抛出,最后在 year() 中捕获。由于 8 超出范围,因此输出显示为 Invalid day。
Input: 8
Output:Error originated in day() and was thrown
Invalid day
Error was caught and rethrown in month()
Invalid day
Error was finally caught in year()
Invalid day
- 程序:
Welcome To Geeksforgeeks
- 输出:
Error originated in day() and was thrown: Invalid day Error was then caught and rethrown in month(): Invalid day Error was finally caught in year(): Invalid day
示例 2:数字 5 是有效的天数,因此不会引发错误。因此,我们将输出作为有效日期。
Input: 5
Output:
valid day:
Fri
Welcome To Geeksforgeeks
valid day:
Fri