首页 > 解决方案 > 从 AWS lambda.invoke 同步获取价值

问题描述

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

当我调用lambda.invokeusingawait回调时,似乎仍然是异步调用的。我想要我需要在下一行代码中可用的值,因此需要同步。但是,在下面的日志代码中,我看到“回调中的数据”条目出现在“回调中的数据”条目之前,回调中的值为 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);
}

谢谢,

克里斯

标签: amazon-web-servicesasync-awaitaws-lambda

解决方案


AWS-SDK 已经承诺。如果您想使用 8.10 运行时并尝试&& catch块,则只需使用以下代码段:

    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);
        }
    }

推荐阅读