Node.js从版本7开始就有了处理promise的语法糖,现在在我的代码中,以下警告经常出现:
(node:11057) UnhandledPromiseRejectionWarning: Unhandled promise
rejection (rejection id: 1): ReferenceError: Error: Can't set headers
after they are sent.
(node:11057) DeprecationWarning: Unhandled promise rejections are
deprecated. In the future, promise rejections that are not handled
will terminate the Node.js process with a non-zero exit code.
不幸的是,没有提到那条线,那里的渔获物丢失了。有没有办法不检查每个try/catch块就找到它?
5条答案
按热度按时间6xfqseft1#
监听进程的
unhandledRejection
事件。pprl5pva2#
显示未处理的ES6 Promise拒绝的完整堆栈跟踪的正确方法是使用
--trace-warnings
标志运行Node.js。这将显示每个警告的完整堆栈跟踪,而不必从您自己的代码中拦截拒绝。举例来说:确保
trace-warnings
标志位于.js
文件名之前!否则,该标志将被解释为脚本的参数,并且它将被Node.js本身忽略。如果你真的想 * 处理 * 未处理的拒绝(例如。通过记录它们),那么你可能想使用我的
unhandled-rejection
模块,它用一个事件处理程序捕获每个支持它的主要Promises实现的所有未处理的拒绝。该模块支持Bluebird,ES6 Promises,Q,WhenJS,
es6-promise
,then/promise
以及任何符合任何未经处理的拒绝规范的内容(文档中的完整细节)。wmtdaxz33#
使用堆栈跟踪记录日志
如果您正在寻找更有用的错误消息。尝试将其添加到节点文件中。它应该显示崩溃发生的完整堆栈跟踪。
x759pob24#
这个模块允许我追踪罪魁祸首promise:https://www.npmjs.com/package/trace-unhandled
1.安装
1.包含在代码中
n6lpvg4x5#
@Jeremy我有相同的结果,
reason
变量由没有定义,我花了很多时间才弄清楚,在我的代码中有一个promise rejection什么也没有提供,通常是:
问题是,您
reject
什么都没有,要获得跟踪,您必须提供错误,如下所示如果你没有错误,你可以自己提供一个,即使是空的,它也会给予一个堆栈跟踪
如果您需要找到错误是从哪里抛出的,请在代码中查找带空拒绝的
Promise