2017-02-24 13 views
0

関数内の関数からデータコールバック/リターンを取得する方法がわかりません。javascript/node.js関数内の関数からのデータのコールバック

processData関数から処理されたデータをコールバックとして渡して、このbufferDataを入力として他の関数として使用したいと思います。現時点では、bufferDataは、traverse関数から呼び出されるときにprocessData関数から返すことはできません。コードは以下の通りです:

function processData(obj, key, value){ 
    var newobj=obj[key][0]; 
    obj[key].push(newobj); 
    fs.readFile(__dirname + '/' + inFile, 'utf8', function(err, res) { 
     if (err) return console.log(err); 
      var data = JSON.parse(res); 
      data.key=obj; 
      bufferData=JSON.stringify(data); 
      **callback(bufferData);** (not sure how to code it to return this bufferData) 
}); } 

function traverse(obj, func) { 
    for (var key in obj) { 
    func(obj, key, obj[key]); 
    if (obj[key] !== null && typeof(obj[key])=="object") { 
     traverse(obj[key], func); 
    }  
} } 

traverse(data, processData); 
+0

あなたはそれで何をしたいのか明確ではありません。私の最初の質問は、彼がコードスニペットの一部ではないので、 'callback(..)'です。あなたが達成しようとしていることを説明してください。あなたが知っておくべきことは 'rs.readFile'です。ファイルの内容全体を非同期に読み込むので、' traverse'は実行を継続し、 'readFile'が完了するのを待ちません。 – Nico

+0

こんにちは@Nico、私はこの質問の詳細を追加しました.Jsonファイルをトラバースしてこのファイルのデータを処理し、新しい処理済みjsonをanther関数に渡したいと思います。 –

答えて

1

コールバックからデータを返すのは本当に意味がありません。

processDataにコールバック関数を追加して、コールバックでreadFileと呼び出すことができます。

fs.readFileSyncを使用すると、ファイルデータを同期して取得できます。

+0

JavaScriptの新機能です、コードスニペットを教えてください。 –

関連する問題