我正在创建一个中间件,用于将跟踪ID添加到每个请求中,并遇到异步钩子和异步本地存储,但我对为什么next函数在run方法中传递感到困惑,当我删除next函数并将其移动到run函数之外时,中间件无法按预期工作,因此请有人向我解释一下将next()放入run()中是为了使事情正常工作。下面是代码示例--
app.use((req, res, next) => {
asyncLocalStorage.run(new Map(), () => {
asyncLocalStorage.getStore().set("requestId", uuid());
next();
});
});
1条答案
按热度按时间k2fxgqgv1#
如果将
next()
放在回调函数之外,它将不会在asyncLocalStorage
创建的上下文中运行,因此您将无法访问存储。文档中也对此进行了说明:
存储区在回调函数外部无法访问。任何在回调中创建的异步操作都可以访问存储区。