从AWS lambda.invoke同步获取价值

时间:2018-10-03 15:44:08

标签: amazon-web-services async-await aws-lambda

我正在尝试使用具有invoke调用类型的RequestResponse方法从另一个Lambda函数调用AWS Lambda函数,并检索从Lambda返回的值。

当我使用lambda.invoke调用await时,回调似乎仍被异步调用。我想要在下一行代码中需要可用的值,因此需要同步。但是,在下面的日志代码中,我看到“ Data out of Callback”项发生在“ Data in Callback”项之前,回调中有0值,而回调中有正确的值。

如果有人可以帮助我了解如何实现这一目标,我将不胜感激!这是代码:

async readData() {

        let myData = [];

        const params = {
            FunctionName: "MyFunctionName",
            InvocationType: "RequestResponse",
        };

        await lambda.invoke(params, (error, data) => {
            if (error) {
                console.log("Got a lambda invoke error");
                console.error(error);
            } else {
                let response = JSON.parse(data.Payload);
                myData = JSON.parse(response.body);

                console.log("Data in Callback: " + myData.length);
            }
        });

        console.log("Data out of Callback: " + myData.length);
}

谢谢

克里斯

2 个答案:

答案 0 :(得分:3)

AWS-SDK已经实现。如果要使用8.10运行时并尝试和&& 捕获块,则只需使用以下代码段:

    async readData() 
    {
        const params = 
        {
            FunctionName: "MyFunctionName",
            InvocationType: "RequestResponse",
        };

        try
        {
            const lambdaInvokeResp = await lambda.invoke(params).promise();

            // if succeed
            // handle your response here
            // example
            const lambdaRespParsed = JSON.parse(lambdaInvokeResp.Payload);
            const myData = JSON.parse(lambdaRespParsed.body);

            return myData;
        }
        catch (ex) // if failed
        {
            console.error(ex);
        }
    }

答案 1 :(得分:0)

发布后不久,我终于偶然发现了一个答案,可以在这篇文章中找到

Invoke amazon lambda function from node app

特别是第三个答案,而不是公认的解决方案。