Javascript - 在哪里放置try-catch?

时间:2015-01-25 20:07:19

标签: javascript try-catch

尝试catch用于捕获错误并向用户报告。一切都说得好。但是,只有一个人必须把try-catch。或者究竟必须在内部尝试捕捉。

最重要的是,拥有try catch块绝对是一个很好的编码实践吗?

2 个答案:

答案 0 :(得分:0)

我认为如果它会处理错误并防止程序崩溃,那么使用try catch是很好的做法。

取自W3学校:

  
      
  1. try语句允许您测试代码块以查找错误。
  2.   
  3. catch语句允许您处理错误。
  4.   
  5. throw语句允许您创建自定义错误。
  6.   
  7. finally语句允许您执行   代码,在尝试和捕获后,无论结果如何。
  8.   

一个例子:

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