【问题标题】:AWS NodeJS lambda call within a lambda functionlambda 函数中的 AWS NodeJS lambda 调用
【发布时间】:2020-02-07 20:22:36
【问题描述】:

我正在尝试从另一个 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 函数演示代码

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 的了解不多,所以这种情况正在发生。我猜不知道如何以正确的方式回电。任何帮助将不胜感激

【问题讨论】:

    标签: node.js amazon-web-services callback aws-lambda


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。但它给了我以下错误错误错误:未捕获(承诺):HttpErrorResponse:{“headers”:{“normalizedNames
    • 504 OK","error":{"errorMessage":"2020-02-07T20:44:42.421Z d4d05a74-fd9b-42a2-9d60-ffb3f04ba8a2 任务在 10.01 秒后超时"跨度>
    • 在我将 10 秒更改为 5 秒后,它开始工作。谢谢。
    最近更新 更多