JavaScript 为什么我们无法在函数外部捕获错误

JavaScript 为什么我们无法在函数外部捕获错误

在本文中,我们将尝试理解为什么以及我们如何无法在函数外部捕获错误,并通过JavaScript中的一个示例来解决这个问题。

首先,我们将通过一个示例和一些理论解释更清楚地理解我们的问题陈述:

示例1:

  • 在这个示例中,我们将创建一个函数,它将接受一个整数参数值,并在函数中进行后续的使用。
  • 在函数内部,我们将尝试创建一个带有finally的try-catch块(不管是否捕获到异常,finally块的结果都会被打印出来)。
  • 然后,在try块中,我们会检查整数值,在catch块中,我们将捕获在检查整数值后在try块中捕获到的错误。除此之外,在catch块中,我们还将抛出另一个错误,并在稍后捕获它。
  • 在finally块中,我们将通过console.log()打印一个语句(以字符串形式),然后使用return语句返回整数参数。
  • 接下来,我们将创建另一个函数,在这个函数中,我们将使用同样的try/catch块捕获先前创建的函数中捕获到的错误。

Javascript

<script> 
    let checkPassedValue = (num) => { 
        try { 
            if (num === 5)  
                console.log(`{num} found successfully..!!`); 
            else 
                throw new Error(`{num} is not the required number`); 
        } catch (error) { 
            console.log(error.message); 
            throw new Error("Error thrown in Catch Block...!!"); 
        } finally { 
            console.log("Finally block's data content..."); 
            return num; 
        } 
    }; 
  
    let dataChecking = () => { 
        try { 
            let data = checkPassedValue(10); 
            console.log("Data value received from "
                + "First Function is: " + data); 
        } catch (error) { 
            console.log("Catched error in next function is: "
                + error.message); 
        } 
    }; 
  
    dataChecking(); 
</script> 
JavaScript

输出: 在下面显示的输出中,我们将看到我们的错误没有正确地从第一个函数传递到第二个函数。

10 is not the required number
Finally block's data content...
Data value received from First Function is: 10
JavaScript

说明:

  • catch块失败的原因是无法捕获在前一个函数的try块中捕获的错误,原因是return语句被置于finally块本身内部。
  • 这个return语句实际上会优先执行,改变了我们作为用户无法接收或捕获以前捕获的错误的结果。
  • 为了捕获错误,我们在finally块中不应该使用任何return语句,我们将在下面的另一个示例中展示它。

示例2:

  • 在这个示例中,我们将利用上一个示例中的概念,包括函数声明,然后创建try/catch块以及finally块等等。
  • 这里,我们将在finally块内部使用return语句来避免错误被正确缓存。
  • 我们将不使用return语句,而是将返回的数据传递给console.log()语句,其他的事情和之前的示例一样。
  • 在这里,我们将成功捕获错误,并且还能够将其打印在输出中。

JavaScript

<script> 
    let checkPassedValue = (num) => { 
        try { 
            if (num === 5)  
                console.log(`{num} found successfully..!!`); 
            else 
                throw new Error(`{num} is not the required number`); 
        } catch (error) { 
            console.log(error.message); 
            throw new Error("Error thrown in Catch Block...!!"); 
        } finally { 
            console.log("Finally block's data content..." + num); 
        } 
    }; 
  
    let dataChecking = () => { 
        try { 
            let data = checkPassedValue(10); 
            console.log("Data value received from "
                + "First Function is: " + data); 
        } catch (error) { 
            console.log("Catched error in next function is: "
                + error.message); 
        } 
    }; 
  
    dataChecking(); 
</script> 
JavaScript

输出:

10 is not the required number
Finally block's data content...10
Catched error in next function is: Error thrown in Catch Block...!!
JavaScript

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册