2016-09-29 46 views
0

這段代碼JavaScript函數返回的是空後文件讀取

var fs = require("fs"); 
var freeApps = readFile(); 
console.log('4' + freeApps.toString()); 

function readFile() { 
    var content = ''; 
    fs.readFile(__dirname + "/public/json/" + "test.json", function(err, data) { 
     if (err) { 
      console.error(err); 
      return ''; 
     } 
     console.log('1' + data.toString()); 
     content = data; 
     console.log('2' + content.toString()); 
    }); 
    console.log('3' + content.toString()); 
    return content; 
} 

回報

3 
4 
1{"application":[{"name":"test","test":"name"}]} 
2{"application":[{"name":"test","test":"name"}]} 

所在的盤符是test.json內容。我該如何正確讀取文件內容並在函數中處理? 我成功地獲得了內容在哪裏1,並轉發到另一個功能,但不是在該功能內爲什麼?

+2

*** a ... synch ... ronous ***,不能簡單地從已發生的事情返回。 – adeneo

+0

這就像是訂購比薩餅,你需要等待它才能夠使用它。您不能從異步方法返回。 – epascarello

+0

我很害怕。如何在不阻止整個應用程序的情況下讀取文件? – user3732793

回答

2

如果你問爲什麼你的readFile函數沒有返回content,這可能是因爲這段代碼是關閉的,這是因爲return語句在文件讀完之前被調用。這稱爲「異步」功能,因爲它與您的其他代碼並行運行。

因此,您不能像在此處那樣重新指定content。相反,您需要從您的回調(您的控制檯日誌1和2所在的位置)中調用一個函數,和/或使用Promises,這是一種用於處理異步行爲的高級技術。

+0

恐怕如此。網絡中有很多例子,如果你有一個簡單的例子,那麼它就會非常友好。 – user3732793