从AWS Lambda.invoke同步获取返回值

3
我正在尝试使用invoke方法并使用RequestResponse调用类型从另一个Lambda函数调用AWS Lambda函数,并检索Lambda返回的值。
当我使用await调用lambda.invoke时,回调仍然似乎是异步调用。我希望所需的值在下一行代码中可用,因此需要同步要求。但是,在下面的代码中,日志中我看到 "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个回答

4

AWS-SDK已经使用Promise实现了。如果您想使用8.10运行时并使用trycatch块,则只需使用以下代码片段:

    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
谢谢!我想应该有更好的方法来做这件事,这看起来好多了!JS 的 Promise 有时让我感到头晕,下次我还是坚持使用 Python 或 Java :-) 再次感谢! - Chris Slack

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接