NodeJS: 是否可以显示调用异步函数的堆栈跟踪?

13

大多数Node库中的API都是设计为异步的。当在回调函数中抛出异常时,堆栈跟踪仅显示从process._tickCallback开始的调用堆栈。

我想知道是否有技巧可以显示触发_tickCallback函数的堆栈跟踪。


这里有一个你可以使用的方法(链接到 GitHub Gist)。缺点:需要几行额外的代码 - 您必须用 try/catch(也可以使用 promise.catch(...))封装所有异步函数调用。然后,创建一个新的 Error 对象并将其 stack 属性添加到现有的堆栈中。如果对于所有异步函数调用都执行此操作,则会得到完整的堆栈跟踪。速度劣势(堆栈跟踪创建是昂贵的)对于异步函数不应该有太大影响(请勿在正常控制流程中使用异常)。 - Mörre
3个回答

7
在Node 8版本中出现了async_hooks。这个新功能可以用于异步堆栈跟踪,trace就是利用它来实现的。

6

1
你可以查看长堆栈跟踪来确定是否符合你的需求。该模块名为stackups。你只需要安装它即可:
npm install --save stackup

然后要求它:
require('stackup');

更多信息请参见:https://github.com/groundwater/node-stackup


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接