【发布时间】: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