Node.js 在承诺内提出时未显示的例外情况

Node.js 在承诺内提出时未显示的例外情况,node.js,exception,promise,es6-promise,Node.js,Exception,Promise,Es6 Promise,我正在开发一个严重依赖承诺的节点模块。出于某种原因,当在承诺代码中引发异常时(例如“undefined is not a function”),异常消息不会显示在控制台中-承诺链似乎在没有任何反馈的情况下停止,我所能做的就是猜测是什么导致了这一点。 如何强制节点显示所有异常 承诺是安全的——也就是说,承诺会将放弃转化为拒绝。如果在中抛出异常,则您将得到一个被拒绝的承诺,您可以恢复而不是使整个服务器崩溃 旧的promise库和本机promise都没有“未处理的拒绝跟踪”功能,基本上可以抑制您的错误

我正在开发一个严重依赖承诺的节点模块。出于某种原因,当在承诺代码中引发异常时(例如“undefined is not a function”),异常消息不会显示在控制台中-承诺链似乎在没有任何反馈的情况下停止,我所能做的就是猜测是什么导致了这一点。
如何强制节点显示所有异常

承诺是安全的——也就是说,承诺会将放弃转化为拒绝。如果在
中抛出异常,则
您将得到一个被拒绝的承诺,您可以恢复而不是使整个服务器崩溃

旧的promise库和本机promise都没有“未处理的拒绝跟踪”功能,基本上可以抑制您的错误。较新的库具有“未处理的拒绝跟踪”功能,它不显示您描述的行为

你的选择是:

  • 使用像Bluebird promises这样的新库,它将把未处理的拒绝记录到您的控制台。也就是说,图书馆实际上为您解决了这个问题
  • 在某些库中,可以使用承诺链末尾的
    .done
    将未处理的拒绝转换为抛出的异常
  • 这是一个真实的、痛苦的、公开的问题。您必须添加
    .catch(函数(e){setTimeout(函数(){throw e;});})
    ,即显式不安全地抛出并导致错误显示。你必须为每一个承诺链末端这样做。我个人觉得这很恼人

请注意,预计v8最终会解决这个问题,其行为类似于蓝鸟的承诺,但我们还没有最后期限。一般来说,我认为本机promises尚未准备好在node中使用,最好使用一个强大的库。

请显示您的代码并解释您使用的promise库(或内置的V8 promises)。我使用的是npm的
promise