【问题标题】:JavaScript: Try/Catch vs error function passed as a parameterJavaScript:Try/Catch 与作为参数传递的错误函数
【发布时间】:2014-10-21 00:16:43
【问题描述】:

我想知道对于 nodeJSJavaScript 中的错误处理和调试哪种方法更好?

有一个纯 try/catch 块:

try
{
  dangerous.function();

}
catch(error);
{
  console.log(error);
}

只使用一个函数作为参数,如果出现错误会显示

dangerous.function(function(error)
{
  console.log(error);
});

我提出这个问题是因为我读到 try/throw 可能会记录太多堆栈跟踪数据,如下所示:http://nodejs.org/api/domain.html#domain_warning_don_t_ignore_errors

【问题讨论】:

  • 好吧,原生 try/catch 的主要限制是它没有类型(你必须捕获 everythingnothing 并且它没有'不适用于异步函数(在 Node 中,您可以使用域来解决这个问题,甚至更好 - 只需使用安全的承诺)。如果这两个不是问题,则更喜欢本机语法。

标签: javascript node.js error-handling try-catch conceptual


【解决方案1】:

这完全取决于你。异常具有提供堆栈跟踪的优势。

请注意,如果dangerous.function 以异步方式完成其工作,那么您将需要使用第二种方法,因为最初不会捕获任何异常。但这并不意味着你不能使用异常,只是如果你想使用异常,你必须将异常传递给回调而不是抛出它。 (或者不要使用异常,这也完全取决于您。)

【讨论】:

  • ---您实际上不必将异常传递给回调 - 您可以使用承诺。--- 嗯,这很讽刺。总体来说很好的答案。
  • @BenjaminGruenbaum:您可以使用 Promise,但 Promise 的结果(您将传递给 Promise 的拒绝回调)可能是一个例外,提供方便的信息。不过,我最后一句话的措辞可以改进。
  • 是的,只要这些是 Error 对象(或明确使用 Error.captureStackTrace),您就会得到堆栈跟踪。人们出于某种原因倾向于低估 JavaScript 中的那些,直到他们在 100K LoC 代码库中出现错误,此时他们会恐慌:)
【解决方案2】:

它们旨在实现相同的目的,但它们将用于不同的环境:

  • try/catch 只能拦截同步错误
  • 回调将允许同步和异步错误传输

我强烈建议阅读 this article(尽管它首先针对 Node.js 开发人员,但它对每个 JavaScript 开发人员都很有价值),它完全涵盖了该主题。

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    • 2021-07-22
    • 2013-01-27
    • 2019-11-15
    • 1970-01-01
    相关资源
    最近更新 更多