我正在开发一个严重依赖Promise的节点模块。出于某种原因,当在Promise代码中引发异常时(例如“undefined不是函数”),异常消息不会显示在控制台中 - 承诺链似乎停止而没有任何反馈,我只能做所有事情猜猜是什么导致了这一点。 如何强制Node显示所有异常?
答案 0 :(得分:2)
承诺是安全的 - 也就是说他们将投掷转换为拒绝。如果在then
内引发异常,则会收到被拒绝的承诺,您可以恢复而不是使整个服务器崩溃。
较旧的承诺库以及本机承诺不具有“未处理的拒绝跟踪”功能,并且基本上可以抑制您的错误。较新的库具有“未处理的拒绝跟踪”功能,但不会显示您描述的行为。
您的选择是:
.done
将未处理的拒绝转换为抛出的异常。.catch(function(e){ setTimeout(function(){ throw e; }); })
- 明确不安全地抛出并导致错误显示。您必须为每个承诺链结束执行此操作。我个人觉得这很烦人。请注意,预计v8将最终解决此问题并且行为与蓝鸟承诺相似,但我们还没有截止日期。一般来说,我认为原生承诺还没有为节点中的黄金时间做好准备,最好使用强大的库。