SetTimeout + fs.writeFile删除我的对象

时间:2017-04-20 13:47:01

标签: javascript json node.js

我有一个对象“房间”,我试图每隔10秒将其内容打印到一个文件“logging.json”。

true

第一次(10秒后)它工作,我的文件logging.json完成了。但是第二次调用该函数时,我的对象“rooms”的内容被删除,我获取的logging.json文件也是空的。

此外,我的程序的其余部分正确地使用这部分代码,所以我不认为它来自其他东西。

你能告诉我为什么我得到这个以及如何解决它?

编辑:当我尝试打印我的房间对象时,这就是我在控制台中得到的结果。

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

另外,我不明白为什么服务器每10秒重新启动一次,这不应该。

1 个答案:

答案 0 :(得分:2)

当您正在使用nodemon时,您需要告诉nodemon忽略您正在编写的文件,否则您的整个应用都将重新启动每次更新文件。这可以通过命令行完成,如下所示:

nodemon --ignore logging.json app.js

或者通过更新nodemon配置。

如果您想每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)