Я пытаюсь использовать асинхронные хуки в функции Lambda с помощью пакета async-local-storage
.Мой код все работает локально, согласно моим тестам, но не работает в 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
.Здесь есть идентификатор выполнения, и вызов set
возвращает true
.
Может кто-нибудь заметить, почему функция set
не работает в функции-обработчике, и предложить способ заставить ее работать?Заранее спасибо.