【问题标题】:How to handle errors outside try/catch?如何处理 try/catch 之外的错误?
【发布时间】:2021-01-26 06:34:59
【问题描述】:

我在我的代码中的许多地方使用 try/catch 从控制台隐藏了错误系统。示例:

try {
  //code with error
}
catch(e){
  //do nothing
}

现在我正在向我的程序添加调试模式,并且我绝对希望将所有错误都记录到控制台,包括由上述构造处理的错误。最简单的方法是在每个捕获中添加一些 debugPrint func,其中将检查 DEBUG env var,但我正在寻找最短的方法。我试图将错误事件侦听器添加到窗口,但这不起作用。有没有类似的解决方案?

【问题讨论】:

    标签: javascript error-handling console.log


    【解决方案1】:

    我会将代码包装在传递给函数的回调中运行,并让该函数在 try/catch 中调用回调,并在需要时记录:

    const runWithCatch = (cb) => {
      try {
        return cb();
      } catch(e) {
        if (debug) {
          console.error(e);
        }
      }
    };
    
    runWithCatch(() => {
      // some code that might throw
    });
    

    也就是说,这很奇怪,看起来可能是 X/Y 问题。在精心编写的同步代码中不应该出现运行时错误;如果确实出现错误,几乎肯定应该重构代码。

    (如果您正在发出异步请求,情况就完全不同了,因为预期偶尔会出现错误是合理的,这不是由于代码逻辑中的问题)

    【讨论】:

    • 换句话说,问题是,是否有可能在不影响已经存在的try/catch系统的情况下捕获所有错误?
    • 不,如果错误被捕获在里面,它不会渗透到任何东西上。无论您是否想添加功能以有时记录错误而不是忽略它们,您都必须重构所有 try/catches。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多