尝试catch用于捕获错误并向用户报告。一切都说得好。但是,只有一个人必须把try-catch。或者究竟必须在内部尝试捕捉。
最重要的是,拥有try catch块绝对是一个很好的编码实践吗?
答案 0 :(得分:0)
我认为如果它会处理错误并防止程序崩溃,那么使用try catch是很好的做法。
取自W3学校:
- try语句允许您测试代码块以查找错误。
- catch语句允许您处理错误。
- throw语句允许您创建自定义错误。
- finally语句允许您执行 代码,在尝试和捕获后,无论结果如何。
醇>
一个例子:
fuction foo()
{
try
{
// Block of code to try
}
catch(e)
{
// Block of code to handle errors
document.getElementById("demo").innerHTML = e.message;
}
finally
{
// Block of code to be executed regardless of the try / catch result
}
}
以下是W3学校的更多文档:http://www.w3schools.com/js/js_errors.asp
答案 1 :(得分:0)
是的,使用try-catch块是绝对好的做法。这是一个相当简单(但人为)的演示。
function safeParseJSON(json) {
try {
return JSON.parse(json);
} catch(exception) {
// could not parse this JSON
console.error(exception);
} finally {
return null;
}
}
解析JSON是我在使用try-catch构造时遇到的最常见的情况,因此就是这个例子。
但是,当函数是异步时,通常的try-catch机制不起作用。如果您使用的是server side Javascript platform,那么了解这一点非常重要。
异步事件处理的标准模式如下。
db.connect(options, function connected(err, client) {
if(err) throw err;
client.query(...);
});
因为该回调函数在其他地方运行(大概是在数据库连接时),所以我们不能用try-catch块包装它。相反,大多数异步方法调用都会将错误作为回调的第一个参数传递。
这样我们就可以在错误发生时处理错误。如果没有错误,null
将作为第一个参数传递,以便可以忽略它。
promises的许多实现尝试重新创建此机制,但是以异步方式。
以下是Q的示例:
db.connect(options)
.then(function(client) {
client.query(...);
})
.catch(function (error) {
throw error;
})
.fin(function() {
// finally
db.close();
});
如果您正在使用异步功能,也可以在客户端使用Q。