【发布时间】:2021-02-25 22:59:56
【问题描述】:
根据文档,我假设 Node.js 14 现在确实支持异步代码中的堆栈跟踪,但不幸的是,使用 node --async-stack-traces test.js 仍然只生成部分堆栈跟踪,我最有兴趣了解原因。
运行以下代码:
main()
function main() {
sub();
}
async function sub() {
console.trace('before sleep');
await delay(1000);
console.trace('after sleep');
}
function delay(ms) {
return new Promise(resolve => {
setTimeout(() => resolve(), ms);
});
}
显示使用await之前的完整堆栈但仅显示部分堆栈:
~/MyDev/doberkofler/test $ node test.js
Trace: before sleep
at sub (/Users/doberkofler/MyDev/doberkofler/test/test.js:10:10)
at main (/Users/doberkofler/MyDev/doberkofler/test/test.js:6:2)
at Object.<anonymous> (/Users/doberkofler/MyDev/doberkofler/test/test.js:3:1)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
at internal/main/run_main_module.js:17:47
Trace: after sleep
at sub (/Users/doberkofler/MyDev/doberkofler/test/test.js:12:10)
~/MyDev/doberkofler/test $
【问题讨论】:
-
如果我不得不猜测,我会说它会输出你上次调用
console.trace的跟踪,值得测试一下 -
如果你删除第一个
console.trace,第二个仍然没有堆栈。
标签: node.js async-await callstack