如何从另一个 Node.js Lambda 函数调用 AWS Python Lambda 函数

How to call an AWS Python Lambda function from another Node.js Lambda function

我是 JavaScript 和 AWS 的新手。我正在努力将 Python AWS Lambda 函数连接到 Node.js AWS Lambda 函数。

我想从主 Lambda 函数(假设为父 lambda)的中间行调用一个单独的 Lambda 函数(假设为子 lambda),并使用子 lambda 中的 returned 值父 lambda.

我的子 lambda 在 Python 3.6 中实现,父 lambda 在 Node.js 12.x 中实现。 我想停止执行父 lambda,直到子 lambda return 是它的值。

但似乎父 lambda 中的其余代码行在完成子 lambda 的执行之前执行。

我使用以下 link.
为父 lambda 设置了所需的策略 https://www.sqlshack.com/calling-an-aws-lambda-function-from-another-lambda-function/

我有一个数组分配给变量'img'。如果条件满足,我需要通过将有效负载作为 'img' 数组传递来调用子 lambda,以对该数组进行一些额外的计算,然后 return 将其返回给父 lambda。最后用 returned 数组替换 'img' 变量。

下面是我在父 lambda 中用来调用子 lambda 的代码块。 请注意,“returnArr”是来自子 lambda 的 returned 数组。

const AWS = require('aws-sdk');
AWS.config.region = 'ap-southeast-2';
var lambda = new AWS.Lambda();

exports.handler = async (event, ctx, callback) => {
    //////////code lines for other operations////////////

    let img = [[[2,3,5],[6,7,8]],[[12,13,15],[16,17,18]]];
    let flag=0;
    if(condition){
        console.log("BEGIN");
        var params = {
                FunctionName: 'childFunction', // child lambda function written in Pyton 3.6
                InvocationType: 'RequestResponse',
                Payload: JSON.stringify({ "sendImg" : img})
            };
            lambda.invoke(params, function(err, data) {
                console.log("SENT");
                if (err) {
                console.log(err);
                } else {
                //console.log('Lambda_B said '+ data.Payload);
                let body1;
                flag = 1;
                if(typeof(data.Payload) == 'object') {
                    body1 = data.Payload;
                } else {
                    body1 = JSON.parse(data.Payload);
                }
                img = body1["returnArray"];
                console.log("Modified img array inside: ",img);
                }
            })
            console.log("DONE");
    }

    console.log("flag : "+flag);
    console.log("Modified img array outside: "+img);
    ////////Rest of the code///////////////////////
};

我得到如下输出:

开始
完成
标志:0
修改img数组外:[[[2,3,5],[6,7,8]],[[12,13,15],[16,17,18]]]
已发送
修改后的img数组里面:[[[23,31,54],[63,71,86]],[[12,133,115],[162,117,18]]]


根据输出,您可以看到 if 条件之外的 2 行代码在子 lambda return 修改后的数组之前执行。
'img' if 条件外的数组未修改,但 if 条件内的 'img' 数组被修改。

我想停止执行父 lambda,直到子 lambda return成为数组。

我认为这是因为我对 NodeJS 了解不多。
谁能告诉我哪里错了?

the parent lambda execute before finishing the execution of the child lambda

您正在使用 async handler,因此您的函数在它有机会调用其他函数之前完成。

为了克服这个问题,您可以将代码包装在 new Promise 中的处理程序中,如 AWS docs.

中所示