关于Node.js async_hooks异步上下文追踪输出不符预期的疑问与求助
关于Node.js async_hooks异步上下文追踪输出不符预期的疑问与求助
最近在折腾Node.js的async_hooks模块,想搞懂它的异步上下文追踪逻辑,但实际输出结果和我预想的不太对。
我原本的预期是:每个新的异步函数都会创建一个独立的异步上下文,所有在这个函数里启动的异步进程,它们的asyncTriggerId都应该指向启动它们的那个异步函数。但从实际输出看并不是这样,有没有大佬能帮我理清这其中的门道——要么告诉我怎么实现我预期的效果,要么指出我哪里的理解出现了偏差?
我写了一个基础测试示例,代码如下:
import async_hooks from 'async_hooks'; const hook = async_hooks.createHook({ init(asyncId, type, triggerAsyncId) { console.log(`[INIT] asyncId: ${asyncId}, type: ${type}, triggered by: ${triggerAsyncId}`); }, }); hook.enable(); async function A(){ console.log("A"); return await B(); } async function B(){ console.log("B") C(); return "b"; } async function C(){ console.log("C") return "c"; } function CALLBACK(){ console.log("DONE"); console.log(process.allPromises) } A().then(CALLBACK);
运行后得到的输出是:
[INIT] asyncId: 6, type: PROMISE, triggered by: 1 [INIT] asyncId: 7, type: TickObject, triggered by: 1 A [INIT] asyncId: 8, type: PROMISE, triggered by: 1 B [INIT] asyncId: 9, type: PROMISE, triggered by: 1 C [INIT] asyncId: 10, type: PROMISE, triggered by: 8 [INIT] asyncId: 11, type: PROMISE, triggered by: 6 DONE [INIT] asyncId: 12, type: TickObject, triggered by: 11 undefined [INIT] asyncId: 13, type: TickObject, triggered by: 11 [INIT] asyncId: 14, type: TickObject, triggered by: 11
备注:内容来源于stack exchange,提问作者libby
相关产品推荐
相关产品推荐

