2016-11-26 10 views
1

私はNodeJS関数呼び出しを初めて利用しています。数時間前から画面上で頭を撫でています。AWS Lambda - Nodejs関数はデータを返さない

私が持っているのは、単一のID番号を持つJSONオブジェクトを受け取るAWSラムダ関数です。このID番号は渡され、最終的にはmyJidとして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); 
} 

答えて

5

あなたが引数としてコールバックを持っていたJavaScript関数を呼び出した後、この関数は非同期で実行されるため、あなたは、リターンでコールバックの外に値を取得することはできません。コールバックから値を取得するために、このコールバックは最終的にラムダ関数のコールバック関数を呼び出さなければなりません。

関数 "returningData"はラムダコールバック関数を呼び出す必要があります。

これは構造のようになります。あなたの答えのための

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()は実際にreturningData()であるcallback2を呼び出し、lambda関数への引数として提供されるコールバック関数を呼び出します。 – Digitalkapitaen

+0

助けてくれてありがとう!私にとっての鍵は、ここでJSの非同期性を理解することでした。 – Josh

関連する問題