2016-11-26 45 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