在nodejs中使用try catch是否合适?

pit*_*itu 3 error-handling try-catch node.js express

我只是想知道在nodejs中使用try catch是否合适.例如,我使用节点js的加密模块,用于加密和解密.所以我正在处理任何错误,而在try catch加密/解密是一个很好的做法?????

Zla*_*tko 6

如果您的加密/解密调用是同步的(取决于您使用的库,模块,函数),请尝试/ catch使用它,否则根据您使用它的方式,它可能是无用的.

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

喜欢:

try {
  libraryLib.encrypt(notSureIfThisIsAValidParam);
} catch (err) {...}
Run Code Online (Sandbox Code Playgroud)

您不确定是否已设置用户/密码,并且您不确定加密库是否可能失败,因此您将其换行.

但是try/catch还会创建一个新的执行上下文,复制范围和所有内容,就CPU时间而言,这是一项代价高昂的操作.这意味着您应该尝试避免热代码路径中的try/catch.

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

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

  • 不,Promise本身不使用try/catch.您可以将promises视为一种解耦回调函数:而不是`getUser(name,function(err,content){/*这里有一个带有错误和内容的回调*/});`你会使用` getUserPromise(name).then(function contentCB(content){},function errorCB(err){});`当然,它不是那么简单,但这是它在这个上下文中的要点.(当然,异步流量扁平化,一个地方的错误处理等等超出了_this_问题的范围.) (2认同)