代码之家  ›  专栏  ›  技术社区  ›  CrazyCoder

AWS NodeJS Lamda函数中的Lamda调用

  •  0
  • CrazyCoder  · 技术社区  · 6 年前

    我试图从另一个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 }
    

    我尝试了几种不同的方法,但flow无法正常工作。交叉lambda函数正在执行。但无法及时得到回复。

    我的孩子lambda函数演示代码

    import { Handler, Context } from "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,所以这种情况正在发生。我想我不知道该怎么回电话。任何帮助都将不胜感激

    1 回复  |  直到 6 年前
        1
  •  2
  •   Jason Wadsworth    6 年前

    你应该向第二个lambda承诺,这样你就可以等待了。

        const res = await lambda.invoke(params).promise();
    
        // do things with the response