与AWS Lambda进行异步挂钩

时间:2019-03-07 22:27:52

标签: typescript aws-lambda async-hooks

我试图通过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函数在处理程序函数中为何不起作用的情况,并提出一种使之起作用的方法吗?预先感谢。

0 个答案:

没有答案