正如我所看到的,它是经常可以看到这样一行:节点式回调:完成(异常)还是抛出异常?
if (err) return done(err);
但正如我的理解对不对,我可以这样做:
if (err) throw err;
这看起来相当与做工不错。那有什么区别?
是啊,我知道承诺,我喜欢他们,但仍然,我想知道这个问题的答案。
正如我所看到的,它是经常可以看到这样一行:节点式回调:完成(异常)还是抛出异常?
if (err) return done(err);
但正如我的理解对不对,我可以这样做:
if (err) throw err;
这看起来相当与做工不错。那有什么区别?
是啊,我知道承诺,我喜欢他们,但仍然,我想知道这个问题的答案。
你可以做
if (err) throw err;
如果错误是致命的,你希望你的程序崩溃,因为没有办法赶上这样的错误。如果您编写库或服务器应用程序,则应将错误传递给回调。
由于大多数错误是异步的,因此您可能希望使用回调将错误传播回错误处理程序。
Try/catch块很少使用,只适用于可能失败的少数同步函数,如JSON.parse()
。
真的吗?我认为promise会捕获这些异常,并用catch回调包装它。这是真的? – dt0xff 2014-09-19 14:24:18
这个问题不是关于承诺,是吗?在承诺中,您可以安全地引发异常,这是事实,但您不需要重新引发错误,因为它们会自动传播。 – vkurchatkin 2014-09-19 14:30:48
是的,是有点偏题)所以,没有承诺,我应该总是@done(err)@如果我想抓住它在上层逻辑和处理它,但它错误是致命的,我应该扔它通过电子邮件或自动通知自己? – dt0xff 2014-09-19 14:55:12