Lamda函数中的AWS NodeJS Lamda调用

问题描述 投票:0回答:1

我正在尝试从另一个lambda函数调用Lambda函数,并获取执行其余lambda的结果。

功能的基本流程如下

X - main lambda function
    - process A (independent)
    - process C (need input from process B)
    - process D
    - return final dataset 
Y - Child lambda function
   - process B ( need input from process A and respond back to X )

到目前为止,这是我的代码

var AWS = require('aws-sdk');
AWS.config.region = 'us-east-1';
var lambda = new AWS.Lambda();

const GetUserCheckoutData: Handler = async (userRequest: EmptyProjectRequest, context: Context, callback: Callback) => {

    const dboperation = new UserController();
    const usercheckoutdata = new CheckOutInfo();
    const addresscontroller = new  AddressController();
    const ordercontroller = new OrderController();
    const paypalcreateorder = new PayPalController();

    const userid = await dboperation.getUserID(userRequest.invokeemailAddress);

    usercheckoutdata.useraddressdetails = await addresscontroller.GetListOfAddressByUserID(userid);
    var orderlist = new Array<Order>();
    orderlist = [];

    orderlist =  await ordercontroller.GetCurrentOrder(userid);

    console.log("Order Complete");

    var params = {
        FunctionName: 'api-ENGG-SellItem', // the lambda function we are going to invoke
        InvocationType: 'RequestResponse',
        LogType: 'Tail',
        Payload: '{ "orderlist" : xxxxxxx }'
      };

    lambda.invoke(params, (err:any, res:any) => {
        if (err) {
            callback(err);
        }

        console.log(JSON.stringify(res));

        callback(null, res.Payload);
    });

    usercheckoutdata.orderID = await paypalcreateorder.CreateOrder(userid , orderlist);
    usercheckoutdata.orderPreview = await ordercontroller.OrderPreview(userid);


    //callback(null,usercheckoutdata);
};

export { GetUserCheckoutData }

所以我尝试了几种不同的方式,但是流量无法正常工作。跨lambda函数正在执行。但无法及时得到答复。

我的孩子lambda函数演示代码

从“ aws-lambda”导入{处理程序,上下文};

const SellItem: Handler = (event, context, callback) => {

    context.callbackWaitsForEmptyEventLoop = false;
    console.log("Other Lambda Function");
    setTimeout(() => {


        callback(null, "My name is Jonathan"); 
     }, 1000 * 10); // 10 seconds delay
}

export {SellItem} 

我想因为我对NodeJS的了解不多,所以正在发生这种情况。我猜不知道如何以正确的方式回电。任何帮助将不胜感激..!

node.js amazon-web-services callback aws-lambda
1个回答
0
投票

您应将对第二个lambda的调用作为一个承诺,以便您可以等待它。

    const res = await lambda.invoke(params).promise();

    // do things with the response
© www.soinside.com 2019 - 2024. All rights reserved.