在承诺中引发的exception不会显示

我正在开发一个严重依赖于Promise的节点模块。 出于某种原因,当Promise代码中出现exception(例如“undefined不是函数”)时,exception消息不会显示在控制台中 – promise链似乎停止了,没有任何反馈,我只能做猜猜是什么原因造成的。 我如何强制Node显示所有exception?

承诺是安全的 – 这是他们转换为拒绝。 如果一个exception被抛出then你得到一个被拒绝的承诺,你可以恢复而不是崩溃整个服务器。

较老的承诺库以及本地承诺不具有“未处理的拒绝跟踪”,将基本上抑制你的错误。 较新的库function“未处理的拒绝跟踪”,不会显示您所描述的行为。

您的select是:

  • 使用一个新的图书馆,如蓝鸟承诺,将logging未处理的拒绝到您的控制台。 那就是 – 图书馆实际上为你解决了这个问题。
  • 在某些库中,可以在promise链的末尾使用.done将未处理的拒绝转换为抛出的exception。
  • 本土承诺这是一个真实,痛苦和开放的问题。 你必须添加.catch(function(e){ setTimeout(function(){ throw e; }); }) – 明确地不安全地抛出并显示错误。 您必须为每个承诺链端做到这一点。 我个人觉得这很刺激。

请注意,预计v8 最终将解决这个问题,并performance出类似蓝鸟的承诺,但我们还没有截止date。 一般来说,我认为原生承诺还没有在节点的黄金时间准备好,最好是使用强大的库。