2017-04-20 58 views
0

我有一個對象「房間」,我試圖將它的內容每10秒打印到一個文件「logging.json」中。SetTimeout + fs.writeFile刪除我的對象

setTimeout(function(){ 
    fs.writeFile('./logging.json',JSON.stringify(rooms,null,'\t'),function(err) { 
    if(err) return console.error(err); 
    console.log('done'); 
    }); 
}, 10000); 

第一次(10秒後)它工作,我得到我的文件logging.json完成。但是第二次調用該函數時,我的對象「房間」的內容被刪除,我獲得的logging.json文件也是空的。

此外,我的程序的其餘部分正常工作,沒有這部分代碼,所以我不認爲它來自其他東西。

你能告訴我爲什麼我得到這個以及如何解決它嗎?

編輯:這是當我嘗試打印我的房間對象時,我在控制檯中得到的。

[nodemon] restarting due to changes... 
[nodemon] starting `node serveur.js` 
[ { username: 'Bob', message: 'Hello' }, 
done 
[nodemon] restarting due to changes... 
[nodemon] starting `node serveur.js` 
[] 
done 

此外,我不明白爲什麼服務器每隔10秒會重新啓動一次,不應該這樣。

+0

嘗試使用appendFile代替或加入「a」標誌像WriteFile的(文件,數據,{'flag':'a'},函數) – Vanojx1

+0

與appendFile一樣,我的對象再次被擦除。 – Mit

+0

我只是運行你的代碼。它也可以第二次使用。 你的程序擦除了房間嗎? 你可以添加詳細信息嗎?或更多的代碼? – Gor

回答

2

當您使用nodemon時,您需要告知nodemon忽略您正在編寫的文件,否則整個應用程序將在您更新每個文件時重新啓動。通過更新nodemon配置

nodemon --ignore logging.json app.js 

或者:這可以通過命令行來完成這樣的。

如果要每10秒運行一次該功能,則需要使用setInterval而不是setTimeoutsetTimeout只會在10秒內運行一次。

要替換文件中的所有內容每隔10秒:

const fs = require('fs') 

let count = 0 

setInterval(function() { 
    fs.writeFile('./test.txt', count, function (err) { 
     if(err) { 
      console.log(err) 
     } 
    }) 
}, 10000) 

要追加每10秒的文件:

const fs = require('fs') 

let count = 0 

setInterval(function() { 
    const text = count++ + '\n' 
    fs.appendFile('./test.txt', text, function (err) { 
     if(err) { 
      console.log(err) 
     } 
    }) 
}, 10000) 
+0

是的,我想要替換所有的文件。我也試過setInterval,我得到了相同的結果... – Mit

+0

@Mit啊好的。那麼每10秒鐘你想用房間對象替換文件的內容? – dan

+0

是的,知道該對象可能自更新以來。 – Mit