You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 09:20:33