2017-10-06 218 views
0

我正在嘗試從數組中取值並在文本文件中寫入以下代碼。node.js將數組值寫入文本文件

while(filedataarr.length>0) {    
    firstelement = filedataarr.shift(); 
    //console.log(firstelement); 
    fs.appendFile("D:\\Temp\\testclient.txt", firstelement+"\n", function(err) { if (err) throw err; });      
    } 

它實際上工作,我可以看到文本文件中的數據。但問題是,線的順序是不同的。當我取消註釋console.log,它的作品。我認爲這是因爲異步調用而發生的。我不知道如何處理這個問題。

  Data Comparison 
Array Data   File Data 
11:41:24:562,9057 11:41:24:562,9057 
11:41:24:567,1025 11:41:24:569,8872 
11:41:24:569,8872 11:41:24:567,1025 
11:41:24:571,1572 11:41:24:571,1572 
11:41:24:573,429 11:41:24:573,429 
11:41:24:574,61  11:41:24:577,3683 
11:41:24:576,4863 11:41:24:574,61 
11:41:24:577,3683 11:41:24:576,4863 
11:41:24:578,8483 11:41:24:578,8483 
17:11:53:826,1757 17:11:53:826,1757 

請大家幫忙。

回答

4

您正在執行同步操作,您希望以同步方式執行同步操作。

由於fs.appendFile是異步操作,因此不能保證文件中的下一行是數組的最後一項。

你可以嘗試使用:

while(filedataarr.length>0) {    
    firstelement = filedataarr.shift(); 
    fs.appendFileSync("D:\\Temp\\testclient.txt", firstelement+"\n"); 
    //   ^sync will stop the execution of the loop until the operation 
    // is finished 
} 
+0

它的工作!非常感謝如此迅速的迴應。你讓我今天一整天都感覺很好。 – sand

+0

一個問題。我正在寫入文件只是爲了在源和目的地進行比較,僅用於測試。實際上,我想通過套接字將這些數據發送給客戶端。像,io.emit('currtime',{currtime:firstelement.split(',')[0],number:firstelement.split(',')[1]})。它會同步嗎? – sand

+0

不是。所有關於網絡,文件系統的操作默認都是同步的。假設你使用'socket.io',你[發送的元素應該以相同的順序接收](https://stackoverflow.com/questions/9282892/websocket-are-server-data-sent-synchronously)。 – drinchev