2016-11-26 100 views
1

我是NodeJS函数调用的新手,我一直在屏幕上敲打我的头几个小时,所有的搜索引擎都没有帮助。AWS Lambda - Nodejs函数不会返回数据

所以我得到的是一个AWS Lambda函数,它接收一个具有单个ID号的JSON对象。此ID号传递并最终作为myid发送到getJson函数。这部分工作正在使用,它使用NPM中的REQUEST模块,它接触到Web服务并取回数据。当我console.log(正文)我看到我需要的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); 
} 

回答

5

一旦你调用一个JavaScript函数,有一个回调作为参数,你不能用得到的回报值了回调,因为这个功能异步执行。为了从回调中获取值,该回调最终必须调用lambda函数回调函数。

在你的情况下,“returnsData”函数需要调用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); 
}; 
+0

非常感谢您的回答。你能否提供一个我可以如何做的例子?再一次,JS非常新。 – Josh

+0

@Josh添加了一些代码来显示结构。请注意,getJson()会调用callback2,它实际上是returnedData(),后者又调用作为lambda函数参数提供的回调函数。 – Digitalkapitaen

+0

感谢您的帮助!对我来说关键是在这里理解JS的异步特性。 – Josh