gpt4 book ai didi

javascript在函数调用时捕获错误

转载 作者:搜寻专家 更新时间:2023-10-31 23:44:42 26 4
gpt4 key购买 nike

Java 方法中可以使用关键字 throws Exception 并且在调用该方法时抛出所有错误,这减少了 try catch 的使用

我现在正在学习 JavaScript,但我很难相信 JavaScript 中没有类似的关键字,我们是否应该用 try-catch block 包围所有内容?

我发现自己像这样检查每个变量

if(packet.username && packet.password && packet.id && packet.errors)

然后检查所有这些变量的类型

并且使用了大量的 try catch block ,这使得代码非常大且不清楚

我觉得这真的很烦人,有没有办法处理任何错误并在主函数调用中捕获它们?

编辑:因为已经有 3 个答案而且他们都误解了问题,对此感到抱歉,英语不是我的母语

我不想知道如何抛出异常,以这个 java 与 javascript 的例子为例

我正在编写一个应该处理各种错误的服务器,现在如果发生错误,很可能是客户端正在发送服务器不期望的自己的自定义数据....

在java中,我会做这样的事情

try{
// I only need to try catch here....
parsePacket();
}
catch(Exception e){
e.print();
}

void parsePacket() throws Exception{
//.....
// a lot of more possible errors here mainly the ones the server doesn't expect....
//.....
anotherFunction();
//imagine a lot of more functions here that can throw an error
}

void anotherFunction() throws Exception{
//.....
// a lot of more posible errors here....
//.....
}

有多漂亮?只有一个 try-catch block ,但是在 javascript 中我发现自己这样做

JavaScript

try{

parsePacket();
}
catch(Exception e){
e.print();
}

void parsePacket(){
try{
//for some reason I have to catch TypeErrors and other ones here too
//.....
// a lot of more posible errors
//.....
anotherfunction(()=>{
try{
//.....
// a lot of more posible errors here
//.....
}
catch(err){

}
})
}
catch(err){

}
}

void anotherFunction(){
try{
//.....
// a lot of more posible errors here
//.....
}
catch(err){

}
}

它会很快变得丑陋

最佳答案

JavaScript 中,异常处理的工作方式与 Java 略有不同。您需要为每个案例定义异常(类型检查),如果案例匹配,则抛出该异常,然后该异常将缓存在catch block 中。

来自官方文档的类型检查示例:

function getRectArea(width, height) {
if (isNaN(width) || isNaN(height)) {
throw "Parameter is not a number!";
}
}

try {
getRectArea(3, 'A');
} catch (e) {
console.log(e);
// expected output: "Parameter is not a number!"
}

有关throw 语句的更多详细信息,请查看here .

希望对您有所帮助。

关于javascript在函数调用时捕获错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52305113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com