JavaScript 如果发生错误是否可以重试try-catch块
在本文中,我们将尝试通过理论和编码示例来理解如何在JavaScript中重试try/catch块,如果抛出任何特定的错误。
让我们首先看一下下面的示例,这将帮助我们理解如果不重试try/catch块,如果某个结果条件不满足,将会发生什么。
示例1:
- 在此示例中,我们将创建一个函数,在该函数内部创建一个变量,用于存储随机生成的数字。
- 使用JavaScript提供的 Math 类中的一个方法 Math.random() 来计算生成的随机数。
- 在存储随机数后,我们将将该数字乘以10,并使用另一种名为 Math.floor() 的方法获取所有计算过程的地板值。
- 在完成所有这些操作后,我们将检查该数字是否与我们传入的数字匹配,根据情况显示结果或抛出错误,并稍后捕获它。
Javascript
<script>
let checkNumber = (num) => {
let random_number = Math.floor(Math.random() * 10);
if (random_number === num) {
return `Yes number {random_number}
matches with the passed in number{num}`;
} else {
throw new Error("Number doesn't matches");
}
};
try {
console.log(checkNumber(6));
} catch (error) {
console.log(error.message);
}
</script>
输出:
Number doesn't matches
正如我们在输出和代码片段中看到的那样,大多数时间都会抛出错误语句,因此大多数时间我们传入的数字与随机生成的数字不匹配。让我们来看看下面说明的示例,它将创建一个重试的try/catch块,直到传入的数字与函数内部随机生成的数字匹配为止。
示例2:
- 在这个示例中,我们将创建另一个函数,并考虑到之前示例中创建的函数。
- 在其中,一个函数在循环中将创建一个try/catch块,在try块内部将返回我们的第一个函数,以便如果数字不匹配,我们可以在catch块中捕获第一个函数抛出的错误。
- 输出肯定是一个正数,表明“是的,数字与传入的数字匹配”,但是在这里我们的调用堆栈大小会增加,因为多次错误将被缓存为除一次以外的数字始终被拒绝。
Javascript
<script>
let checkNumber = (num) => {
let random_number = Math.floor(Math.random() * 10);
if (random_number === num) {
return `Yes number {random_number} matches
with the passed in number{num}`;
} else {
throw new Error("Number doesn't matches");
}
};
let checkAgainNumber = () => {
while (true) {
try {
return checkNumber(7);
} catch (error) { }
}
};
console.log(checkAgainNumber());
</script>
输出结果:
Yes number 7 matches with the passed in number 7