javascript - 在 try block 中使用 try 来捕获不同的错误是一个好习惯吗? - JavaScript

标签 javascript node.js typescript error-handling try-catch

我在 try block 内使用 try catch 来打印相关消息或了解哪个方法发生了错误。

代码片段

  for (const searchUrl of savedSearchUrls) {
    console.log("here");
    // function will get all the links of profiles in saved search url
    try {
      const links = await scrapeFromurl(browser, searchUrl);
      try {
        saveToDatabase(links);
      } catch (e) {
        handleError(e, "eror while saving to database");
      }
    } catch (err) {
      handleError(err, "error in scrapeFromurl()");
    }
  }

我在 google 上搜索过,但找不到相关主题。

还有哪些其他方法可以完成类似的事情? 处理此类情况的最佳做法是什么。

最佳答案

默认情况下,单个 try-catch block 就足够了,不需要在其中嵌套其他 try-catch 。但是,这些规则可能存在一些合法的异常(exception)情况。

异常 1:同一异常的不同处理程序

让我们考虑以下示例

try {
  myroutine(); // may throw three types of exceptions
} catch (e) {
  if (e instanceof TypeError) {
    // statements to handle TypeError exceptions
  } else if (e instanceof RangeError) {
    // statements to handle RangeError exceptions
  } else if (e instanceof EvalError) {
    // statements to handle EvalError exceptions
  } else {
    // statements to handle any unspecified exceptions
    logMyErrors(e); // pass exception object to error handler
  }
}

完全有可能在您的 try 内部有一个部分,其中给定的错误类型(例如 RangeError)需要与主 不同的处理方式捕获。在这种情况下,在 try 中添加另一个 try-catch 可能是有意义的,尽管在这种情况下,为了更好的可读性,将内部 try 视为一种方法并调用它是有意义的,因此您不会在物理上嵌套 try -catch block ,但将 try-catch 的关注点分离到单独的方法中。

异常2:仅在try block 的一部分处理某种类型的错误

您很可能希望 try-catch 在 try block 的大部分中进一步抛出错误,但是,在特定部分中您希望它处理它。同样,在这种情况下,将内部 try 分离到它自己的方法中是有意义的。

结论

嵌套的 try-catch 对于读者来说是不直观的,因此每当您遇到嵌套 try 的需要时,将内部 try 分离到它自己的方法中是有意义的。然而,正如上面的例子所示,有合理的需要偏离某些部分的错误的外部处理。但是,默认情况下,最好将这些部分视为值得与方法分离的单独关注点。当然,有时您可能希望保留嵌套的 try-catch 而不分离它们的关注点,但通常值得应用分离。因此,您可能需要考虑的一条经验法则是将嵌套的 try-catch 重构为单独的方法或单个 try-catch,除非有充分的理由不这样做

关于javascript - 在 try block 中使用 try 来捕获不同的错误是一个好习惯吗? - JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73533145/

相关文章:

javascript - 断开node-xmpp客户端连接

Javascript Sinus 不正确

javascript - 概念 : Creating a function that acts like a constructor in JavaScript

javascript - 尝试设置 node.js Web 服务器

node.js - 通过 Json 发送到服务器时收到空映射

typescript - 测试 Typescript 中的字符串文字类型

html - 无法在 Angular 4 中正确更改页面

javascript - 在非 ajax 帖子中包含 json 数据

javascript - 仅在 "body"元素上禁用拖动?

javascript - 如何组合两个接口(interface)并使其所有字段可选?