【问题标题】:halting after errors happen in catch在 catch 中发生错误后停止
【发布时间】:2020-10-25 04:22:35
【问题描述】:

我最近读到,当出现错误时写throw error 是一个很好的做法,以便停止处理错误的结果。我不确定它是否适用于使用 node.js 和 express 构建的 Web 应用程序的服务器。我应该用throw error. 处理所有.catch throw error 会导致我的应用程序崩溃吗?

【问题讨论】:

  • 您的问题有点宽泛。这里的答案是“视情况而定”。如果错误是致命的(意味着您的应用程序无法正常运行),例如,如果它没有正确的数据库凭据,那么是的,也许最好让它崩溃,并在您的应用程序不断崩溃和重新启动时设置监控/警报。但是,如果错误只是某些用户以您无法使用的格式发布数据,那么最好抛出,以便您获得一些日志,但您应该处理(捕获)该错误,而不是让它崩溃您的整个应用

标签: javascript node.js express error-handling throw


【解决方案1】:

正确捕捉错误是每种语言的好习惯(当然,它支持它)。这适用于您编写的每个代码,无论它是某个服务器、客户端还是其他任何东西。

捕获错误的全部意义在于避免您的应用在不注意的情况下崩溃并适当处理崩溃的原因,例如,通知用户(或您自己)存在问题,停止处理某些循环,停止整个应用程序或其他任何对您的情况有意义的东西。

【讨论】:

    【解决方案2】:

    catch 块是您处理错误的地方。换句话说,这是您可能触发函数的替代结果的地方。示例:

    try {
      const result = await fetchSomeData();
      if(result !== null) {  
        return result;
      }else{
        throw "nothing was fetched"
      }
    } catch(error) {
      console.log(error);
      const result = { error: "a custom error message", function: customCallBack };
      return result;
    }
    

    【讨论】:

    • 在这种情况下,我是否需要在我的catch 中添加throw 而不仅仅是console.log
    • 不,throw 是为了创建异常(错误),catch 是为了捕捉(处理)错误。在这个例子中,fetch 没有返回错误,它返回了 null,这可能会在应用程序的其他地方导致错误。因此,我不是等待它在其他地方引发错误,而是通过引发错误来控制它,然后通过记录它来处理 catch 块中的错误,然后创建应用程序可以处理的替代结果。
    猜你喜欢
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 2023-04-04
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多