JSON 在 fs.writeFile() 之后吓坏了?

JSON freaking out after fs.writeFile()?

我有这个 database.json 文件要写入

最初看起来像这样

{
    "users": [
        {
            "id": "470055904063127552",
            "credit": 10,
            "cooldowns": [
                
            ]
        },
        {
            "id": "533910695495073792",
            "credit": 15,
            "cooldowns": [
                
            ]
        }
    ]
}

但是写入之后,格式会突然变乱,变成这样:

{
    "users": [
        {
            "id": "470055904063127552",
            "credit": 10,
            "cooldowns": []
        },
        {
            "id": "533910695495073792",
            "credit": 30,
            "cooldowns": []
        }
    ]
}                    "QUIZ": 1636251021979
                }
            ]
        }
    ]
}

这是我的代码:

fs.readFile(database_name, "utf-8", (err, data) => {
            if(err) return console.log(err);

            obj = JSON.parse(data);
            const cooldowns = obj.users[obj.users.findIndex(v => v.id === user)].cooldowns;

            if(!cooldowns.QUIZ)
            {
                cooldowns.push({ "QUIZ": new Date().getTime() + 86400000 })
            }

            json = JSON.stringify(obj, null, 4);
            console.log(json);
            fs.writeFile(database_name, json, "utf-8", () => {})
        })

奇怪的是console.log returns

{
    "users": [
        {
            "id": "470055904063127552",
            "credit": 10,
            "cooldowns": []
        },
        {
            "id": "533910695495073792",
            "credit": 30,
            "cooldowns": [
                {
                    "QUIZ": 1636251021979
                }
            ]
        }
    ]
}

这就是我想要的。

更奇怪的是,有时写入文件会起作用,而其他时候则不起作用。有任何想法吗?谢谢

P.S。唯一搞砸的是 JSON 格式;没有返回其他错误,并且所有变量都已声明并正常工作

基本上我意识到我同时在多个进程中写入文件,所以一切都吓坏了。

解决方法是使用writeFileSync()然后同步更新JSON文件,防止两个进程同时运行。

或者如果需要同时写入一个文件,只需要使用数据库即可。

妈的现在我觉得自己很蠢

编辑: 正如 Brad 指出的那样,您还可以在写入文件时锁定文件,这样写入就不需要同步了。无论哪种方式,只是不要同时写入同一个文件。