Javascript 节点样式回调:完成(异常)还是引发异常?

Javascript 节点样式回调:完成(异常)还是引发异常?,javascript,node.js,exception,Javascript,Node.js,Exception,如我所见,这一行很常见: if (err) return done(err); 但我的理解是正确的,我可以做到: if (err) throw err; 看起来很漂亮,效果也不错。那么有什么区别呢 是的,我知道承诺,我喜欢它们,但我还是想知道这个问题的答案。你们可以做到 if (err) throw err; 如果错误是致命的,并且您希望您的程序崩溃,因为无法捕获此类错误。如果编写库或服务器应用程序,则应将错误传递给回调。由于大多数错误都是异步的,因此可能需要使用回调将错误传播回错误处理程

如我所见,这一行很常见:

if (err) return done(err);
但我的理解是正确的,我可以做到:

if (err) throw err;
看起来很漂亮,效果也不错。那么有什么区别呢

是的,我知道承诺,我喜欢它们,但我还是想知道这个问题的答案。

你们可以做到

if (err) throw err;

如果错误是致命的,并且您希望您的程序崩溃,因为无法捕获此类错误。如果编写库或服务器应用程序,则应将错误传递给回调。

由于大多数错误都是异步的,因此可能需要使用回调将错误传播回错误处理程序


Try/catch块很少使用,而且仅用于少数可能失败的同步函数,如
JSON.parse()

真的吗?我想Promissions会捕获这些异常,并用catch回调将其包装起来。这是真的?问题不是关于承诺,是吗?在promise中,您可以安全地抛出异常,这是真的,但您不需要重新抛出错误,因为它们会自动传播。是的,这有点离题)因此,w/o承诺,如果我想在上层逻辑中捕获并处理它,我应该总是@done(err)@但它是致命的,我应该扔掉它,用电子邮件通知我自己,还是用
returncallback(err)更好(不要忘记
返回
),因此您可以始终在上游处理错误。我使用
抛出错误如果我正在编写一些自动化脚本,它崩溃并打印stacktrace是正常的。@vkurchatkin return做什么?回调是上游。Return在异步代码中不起任何作用,并误导未来的维护人员认为代码是同步的。