📜  如何在 JavaScript 中重新抛出异常,但保留堆栈?

📅  最后修改于: 2022-05-13 01:56:21.823000             🧑  作者: Mango

如何在 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