【问题标题】:AWS Lambda - Nodejs function will not return dataAWS Lambda - Nodejs 函数不会返回数据
【发布时间】:2017-04-10 12:28:39
【问题描述】:

我是 NodeJS 函数调用的新手,我已经在屏幕上敲了几个小时,我所有的谷歌搜索都没有帮助。

所以我拥有的是一个 AWS Lambda 函数,它接收一个带有单个 ID 号的 JSON 对象。这个 ID 号被传递并最终作为 myid 发送到 getJson 函数中。这部分正在工作,它使用来自 NPM 的 REQUEST 模块,它到达 Web 服务并拉回数据。当我 console.log(body) 看到我需要的 JSON 对象时。

问题是我无法让它返回数据,因此我可以在其他地方使用 JSON。我已经尝试过 CALLBACK (BODY)、RETURN (BODY),但没有任何东西都能让我返回要使用的数据。

我尝试在函数中使用回调,它确实调用了该函数,但由于某种原因,即使该函数也不会返回数据供我使用。我已经将 JSON 硬编码到一个变量中并返回它并且它可以工作......但如果我使用 REQUEST 它就不会把它还给我。

我希望这很简单...在此先感谢您!

Calling the function:
            query_result.success = 1;
            query_result.message = "Applicant Data Found";
            query_result.data = getJson(201609260000003, returningData);


function getJson(myid, callback){
    request('http://server.com/service1.asmx/Get_Status_By_External_Id?externalId=' + myid + '',
        function (error, response, body) {
        console.log(body); // I see the JSON results in the console!!!
        callback (body); // Nothing is returned.
        }

    );

}

function returningData(data){
    console.log("ReturningData Function Being Called!");
    var body = '{"Error":null,"Message":null,"Success":true,"ExternalId":"201609260000003","SentTimeStamp":"11/22/2016 1:07:36 PM","RespTimeStamp":"11/22/2016 1:08:32 PM","RespTot":"SRE"}';
    return JSON.parse(body);
}

【问题讨论】:

    标签: javascript json node.js aws-lambda


    【解决方案1】:

    一旦你在 JavaScript 中调用了一个以回调为参数的函数,你就不能通过返回从回调中获取值,因为这个函数是异步执行的。为了从回调中获取值,这个回调最终必须调用 lambda 函数回调函数。

    在您的情况下,函数“returningData”需要调用 lambda 回调函数。

    这将是结构:

    exports.lambda = (event, lambdaContext, callback) => { // this is the lambda function
    
      function returningData(data){
        console.log("ReturningData Function Being Called!");
        var body = '{"Error":null,"Message":null,"Success":true,"ExternalId":"201609260000003","SentTimeStamp":"11/22/2016 1:07:36 PM","RespTimeStamp":"11/22/2016 1:08:32 PM","RespTot":"SRE"}';
        callback(null, JSON.parse(body)); // this "returns" a result from the lambda function
      }
    
      function getJson(myid, callback2){
        request('http://server.com/service1.asmx/Get_Status_By_External_Id?externalId=' + myid + '', function (error, response, body) {
          console.log(body); // I see the JSON results in the console!!!
          callback2(body); 
        });
      }
    
      query_result.success = 1;
      query_result.message = "Applicant Data Found";
      query_result.data = getJson(201609260000003, returningData);
    };
    

    【讨论】:

    • 非常感谢您的回答。你能举个例子说明我是怎么做到的吗?再次,对 JS 来说非常陌生。
    • @Josh 添加了一些代码来显示结构。请注意,getJson() 调用 callback2,实际上是返回Data(),后者又调用作为参数提供给 lambda 函数的回调函数。
    • 感谢您的帮助!对我来说,关键是在这里理解 JS 的异步特性。
    猜你喜欢
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    • 2017-10-14
    • 2020-09-03
    • 2021-08-24
    • 2022-10-14
    • 2017-07-24
    • 1970-01-01
    相关资源
    最近更新 更多