【问题标题】:NodeJS - Find the line of unhandled promise rejectionNodeJS - 找到未处理的承诺拒绝行
【发布时间】:2017-11-09 22:33:45
【问题描述】:

我正在使用事件处理程序来捕获未处理的承诺拒绝,在 SO:

process.on('unhandledRejection', function(error, promise) {
    console.error('UNHANDLED REJECTION - Promise: ', promise, ', Error: ', error, ').');
});

由于我使用的是 nodejs + express,因此打印出代码语句的行号很棘手。我有一个自定义的 console.log2 方法可以做到这一点,但我试图用拒绝处理程序来完成同样的事情。

我已经尝试了各种调用者/堆栈跟踪技巧与错误堆栈等,但这些方法都没有正确显示拒绝()语句所在的行。

编辑

为了澄清,我得到的打印输出一直显示上面的 console.error 语句所在的行号(因此每次都在同一行),然后通过各种承诺库文件/行向后工作。它完全跳过/错过了拒绝()语句本身所在的行。

【问题讨论】:

  • @JaromandaX - 是的,.trace 也不起作用。将澄清问题。
  • 您是否只是尝试代码检查以找到您在哪里使用.then() 而没有.catch()?可能发现的不仅仅是导致此事件的原因。
  • @jfriend00 - 这与特定的拒绝实例无关,我只想要一个通用的处理程序,我希望它包括打印调用者行号。
  • 我认为内置的 Promise 库目前不提供这种功能。通过正确的配置和 Bluebird Promise 库,您可以获得类似于 Bluebird Promise 拒绝的堆栈跟踪的详细信息。
  • @jfriend00 - 如果可以的话,我会尽量避免依赖。这不是超级必要的,我只是希望可以做到。

标签: javascript node.js promise event-handling


【解决方案1】:

很大程度上取决于库,我无法重现它,但我建议您尝试使用这种替代方法:

process.on('unhandledRejection', up => { throw up });

应该比仅仅报告承诺和错误更有效,但也许在您的特定情况下它也可能无法正常工作。只是,试一试!...

【讨论】:

    猜你喜欢
    • 2018-04-01
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    相关资源
    最近更新 更多