我试图通过async-local-storage
包利用Lambda函数中的异步钩子。根据我的测试,我的代码都在本地工作,但在Lambda中不工作。具体来说,它在处理程序函数中不起作用,但是可以在处理程序调用的函数中起作用。
// index.ts (lots of code elided)
const als = require('async-local-storage');
als.enable();
exports.handler = async (event: APIGatewayEvent, context: APIGatewayEventRequestContext) => {
try {
als.set('blah1', '123');
const blah1 = als.get('blah1');
console.log(`blah1 ${blah1}`);
doStuff();
} catch (err) { ... }
}
上面的控制台输出为blah1 null
。有趣的是,此处的set
调用的输出为false
,表明从未调用异步钩子init
回调(因为该调用设置了我正在使用的库中的值)。
// in a different file
const als = require('async-local-storage');
als.enable();
export function doStuff() {
als.set('blah2', '123');
const blah2 = als.get('blah2');
console.log(`blah2 ${blah2}`);
}
上面的控制台输出符合预期:blah2 123
。这里,有一个执行ID,set
调用返回true
。
有人能发现set
函数在处理程序函数中为何不起作用的情况,并提出一种使之起作用的方法吗?预先感谢。