当前位置:嗨网首页>书籍在线阅读

03-使用try和catch处理异常

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

11.2 使用try和catch处理异常

使用 try…catch 语句可以完成异常处理。它的理念是:首先“尝试”去做一些事情,一旦在做的过程中发生异常,就“捕获”这些异常。在前面的例子中,即便 validateEmail 处理了那些邮件中没有包含@的预期错误,但还是有可能产生非预期的错误:比如,某个开发人员不小心给 email 赋了一个非字符串的值。从代码来看,如果将前面例子中的 email 设为 null 、数字、对象等任何非字符串的值时都会出错,此时程序将会非常不友好地崩溃掉。为了防范这种非预期错误,可以将用于验证邮箱的代码封装在 try…catch 语句中,例如:

const email = null; // whoops
try {
   const validatedEmail = validateEmail(email);
   if(validatedEmail instanceof Error) {
      console.error(`Error: ${validatedEmail.message});
   } else {
      console.log('Valid email: ${validatedEmail}');
   }
} catch(err) {
   console.error('Error: ${err.message}');
} 

捕获异常后,程序就不会再崩溃了,而是打印了错误日志后继续执行。不过可能还会有别的问题:如果这里需要输入一个合法的邮箱,而用户输入了无效的邮箱,那程序继续运行下去也没有意义了。不过,至少现在我们可以用一种更优雅的方式处理错误了。

注意,一旦有错误产生,执行逻辑就会立即跳转到 catch 块中。也就是说, validateEmail 调用语句后面的if语句不会再执行。也可以在 try 块中写入任何期望的语句,最先产生错误的语句会使执行逻辑跳转到 catch 块中。如果 try 块中的语句没有任何错误, catch 块中的代码就不会被执行,程序会继续运行下去。