JavaScript:Try/Catch vs error函数作为参数传递

JavaScript:Try/Catch vs error函数作为参数传递,javascript,node.js,error-handling,try-catch,conceptual,Javascript,Node.js,Error Handling,Try Catch,Conceptual,我想知道对于nodeJS,在JavaScript中的错误处理和调试,哪种方法更好 具有纯try/catch块: try { dangerous.function(); } catch(error); { console.log(error); } 或 仅使用函数作为参数,如果出现任何错误,将显示该参数 dangerous.function(function(error) { console.log(error); }); 我提出这个问题是因为我读到try/throw可能会记录太

我想知道对于nodeJS,在JavaScript中的错误处理和调试,哪种方法更好

具有纯try/catch块:

try
{
  dangerous.function();

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

仅使用函数作为参数,如果出现任何错误,将显示该参数

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

我提出这个问题是因为我读到try/throw可能会记录太多的堆栈跟踪数据,如这里所写:

完全由您决定。异常具有提供堆栈跟踪的优点


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

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


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

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

  • try/catch仅用于拦截同步错误
  • 回调将允许同步和异步错误传输

我强烈建议您阅读(尽管这是Node.js开发人员的首选,但对每个JavaScript开发人员来说都很有价值),其中完全涵盖了这一主题。

它们旨在实现相同的目的,但它们将在不同的上下文中使用:

  • try/catch仅用于拦截同步错误
  • 回调将允许同步和异步错误传输

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

好吧,native
try/catch
的主要限制在于它不是类型化的(您必须捕获所有内容或不捕获任何内容,并且它不适用于异步函数(在Node中,您可以使用域来解决这一问题,甚至更好,只需使用抛出安全的承诺即可)。如果这两个方面不存在问题,请选择本机语法。本机
try/catch
的主要限制是它没有类型化(您必须捕获所有内容或不捕获任何内容,并且它不适用于异步函数(在Node中,您可以使用域来解决这一问题,甚至更好—只需使用安全的承诺)。如果这两个都不是问题,请选择本机语法。--您实际上不必向回调传递异常-您可以使用承诺。--嗯,这是一个刺耳的问题。总体回答不错。@BenjaminGruenbaum:您可以使用承诺,但承诺的结果(您将传递到承诺的拒绝回调)对于方便的信息,这可能是一个例外。虽然我的最后一句话的措辞可以改进,但我在上面。是的,只要那些是
Error
对象(或者明确使用
Error.captureStackTrace
)你会得到堆栈跟踪。由于某种原因,人们往往会低估JavaScript中的堆栈跟踪,直到他们在100K LoC代码库中出现错误时才会惊慌失措:)---实际上,您不必向回调传递异常-您可以使用承诺。--meh,这是一个刺耳的回答。总体来说回答不错。@BenjaminGruenbaum:您可以使用承诺,但承诺的结果(您将传递到承诺的拒绝回调)对于方便的信息,这可能是一个例外。虽然我的最后一句话的措辞可以改进,但我在上面。是的,只要那些是
Error
对象(或者明确使用
Error.captureStackTrace
)你会得到堆栈跟踪。由于某种原因,人们往往会低估JavaScript中的堆栈跟踪,直到他们在100K LoC代码库中出现错误时才会惊慌失措:)