AsyncLocalStorage何时进行垃圾回收?

问题描述 投票:0回答:1

我正在使用 AsyncLocalStorage 来跟踪在我的后端运行的事件(userId、url 等)。使用相同的 AsyncLocalStorage 为运行的每个单独事件创建一个存储:

//At startup one AsyncLocalStorage context is made
const context = new AsyncLocalStorage()

然后当事件开始时(例如 API 调用)我使用 context.run

const runWithStore = (data: any, callBack: () => any) => {
  return context.run(data, () => {
    callBack();
  });
};

现在我想知道这家商店是如何收集垃圾的?是

callBack
结束之后吗?

询问原因: 我遇到了一个非常奇怪的问题,其中“保存后”挂钩(猫鼬)正在使用与该挂钩无关的商店(挂钩由于内部事件而正在运行)。

从逻辑上讲,商店应该不可用,因为“保存后”挂钩位于主流程之外。但这种行为似乎很随机。有时该存储不可用(应该如此),但有时它正在使用为 WS 事件创建的存储,该事件已长期处理(并且与此“保存后”挂钩无关)

所以我想知道下面发生了什么,因为这些商店绝对不应该在不同的活动之间共享。

node.js
1个回答
0
投票

您在上下文 (asyncLocalStorage.getStore()) 中存储的数据独立于 AsyncLocalStorage 实例本身。当该数据完成时,它会与相应的异步操作一起被垃圾收集。无需单独调用来管理存储数据的垃圾收集。

© www.soinside.com 2019 - 2024. All rights reserved.