2017-02-24 84 views
0

我不知道如何從函數內部的函數獲取數據回調/返回值。javascript/node.js函數內函數的回調數據

我想將processData函數中的已處理數據作爲回調函數傳遞,並返回此bufferData作爲輸入的其他函數。此時,bufferData函數不能從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

它不太清楚你想用它做什麼。我最初的問題是什麼'回調(..)',因爲他不是你的代碼片段的一部分。你能解釋一下你想達到的目標嗎?你也應該知道的是'rs.readFile'異步讀取文件的全部內容,因此你的'遍歷'將繼續執行,*不*等待'readFile'完成。 – Nico

+0

Hi @Nico,我爲這個問題添加了更多信息,我想遍歷一個json文件並處理這個文件中的數據,然後將新的處理過的json傳遞給另一個函數。 –

回答

1

從回調中返回任何數據確實沒有意義。

您可以將回調函數添加到processData,然後在readFile的回調中調用它。

否則,您可以使用fs.readFileSync,這樣您就可以同步獲取文件數據。

+0

我是javascript新手,能否提供一個代碼片段? –