【问题标题】:is it good to use try catch in nodejs在nodejs中使用try catch好吗
【发布时间】:2016-05-27 11:29:19
【问题描述】:

我只想知道在nodejs中使用try catch是否好。例如,我正在使用节点 js 的加密模块进行加密和解密。所以我在尝试捕获加密/解密时处理任何错误是一个好习惯吗?????

【问题讨论】:

  • 由于 node.js 与 Javascript 具有相同的架构,实际上实现 Javascript 我认为使用 try catch 没有任何缺点。
  • 我在某处读到没有得到它的引用,try catch 是同步的,我不想任何同步。它位于现在已贬值的域模块中。

标签: node.js express error-handling try-catch


【解决方案1】:

如果您的加密/解密调用是同步的(取决于您使用的库、模块、函数),try/catch 可以使用它,否则取决于您使用它的方式,它可能没用。

Try/catch 可以捕获编程错误或有错误的代码,例如来自您不知道可能有错误的库。

喜欢:

try {
  libraryLib.encrypt(notSureIfThisIsAValidParam);
} catch (err) {...}

您不确定是否设置了用户/密码,并且您不确定加密库是否会失败,因此您将其包装起来。

但是 try/catch 也会创建一个新的执行上下文,在作用域上进行复制等等,就 CPU 时间而言,这是一个代价高昂的操作。这意味着您应该尽量避免在热代码路径中使用 try/catch。

Node 中的逻辑/业务错误通常使用错误优先回调模式(或 Promises 或类似模式)来处理。通常,如果您预期程序员错误(即错误)以及您预期的其他错误模式,您只会使用 try/catch。

当然,这只是一种推理,我通常在 Java 转换者编写的 Node 代码中看到很多有意的 throw 子句(意在与 try/catc 一起使用)。但这可能是我特有的,所以 YMMV。

【讨论】:

  • 是的,为此我不想使用 try catch,promises 是一个不错的选择,但它具有错误和 catch 函数来处理错误,因此 promise 模块内部使用 try catch 进行错误处理.
  • 不,Promise 本身不使用 try/catch。您可以在某种程度上将 Promise 视为一个解耦的回调函数:而不是 getUser(name, function(err, content) { /* here you have one callback with both error and content */ });,您将使用 getUserPromise(name).then(function contentCB(content){}, function errorCB(err) {}); 当然,它没有那么简单,但这就是本文的要点。 (当然,异步流扁平化、一个地方的错误处理等等等等超出了 this 问题的范围。)
猜你喜欢
  • 2012-11-25
  • 2012-05-27
  • 2013-11-07
  • 1970-01-01
  • 2019-11-15
  • 2020-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多