JSON 没有正确地将对象转换为字符串

JSON is not properly turning an object into a string

我正在制作游戏并处理帐户。当我 JSON 将对象字符串化并将其保存到文件中时,它有时(偶尔和随机)写入:

{"example@domain.cm":{"email":"example@domain.cm","password":"myPassword","token":"c26a2a66-77f8-43d7-aa92-14da81979386"} >}< "example@domain.com":{"email":"example@domain.com","password":"myPassword","token":"209758d0-9a6e-4e99-835a-21595b822796"}}

当我期待时:

{"example@domain.cm":{"email":"example@domain.cm","password":"myPassword","token":"c26a2a66-77f8-43d7-aa92-14da81979386"} >,< "example@domain.com":{"email":"example@domain.com","password":"myPassword","token":"209758d0-9a6e-4e99-835a-21595b822796"}}

我的代码:

const fs = require('fs');
const { v4: newUuid } = require('uuid');

function save() {
    fs.writeFile('save_info/users.json', JSON.stringify(User.USERS), err => {});
}

class User {

    static USERS = {};

    constructor(email, password, token = newUuid()) {
        this.email = email;
        this.password = password;
        this.token = token;
        User.USERS[email] = this;
        save();
    }
}

这是怎么回事?

编辑 我正在使用 nodemon。每当我保存文件(users.json 除外)时,它会自动停止并启动它。我也在使用 express,因为这个脚本用于服务器部分。 (这是一个私人项目,不求完美,只是学习)

谢谢@jabaa 他们指出了一个警告,即在不等待回调的情况下多次使用 fs.writeFile() 是不安全的。这是解决方案:

var CAN_SAVE = true;
var PENDING_SAVE = false;
function save() {
    if (!CAN_SAVE) {
        PENDING_SAVE = true;
        return;
    }
    PENDING_SAVE = false;
    CAN_SAVE = false;
    fs.writeFile('save_info/users.json', JSON.stringify(User.USERS), err => {
        CAN_SAVE = true;
        if (PENDING_SAVE) save();
    });
}

另一种解决方案是使用 fs.writeFileSync(),这对我来说实际上可能更好......(谢谢,@Steven Spungin)