我在以下两种情况下发现了这个问题。
我正在使用以下内容阅读特定的JSON文件:
fs.readFileSync(_file_path, 'utf-8');
在对接收到的数据进行一些操作之后,我使用以下命令将更新的数据写入同一文件:
fs.writeFileSync(_file_path, {stringified-json});
在此操作期间,我的文件有时会变空,现在我尝试在本地重现此问题但无法重现它。
答案 0 :(得分:1)
fs.writeFileSync()
会抛出,因此请确保您的代码位于try
/ catch
块中,并且catch
并非只是吞下了错误。 (例如,空catch
块将导致吞下异常,或者换句话说,忽略该异常。)
如果这是一个脚本或其他一些可能同时被多次调用的进程(例如,多个进程或你正在使用worker),那么你需要使用文件锁定或其他一些机制来确保你没有有竞争条件。如果进程A打开文件进行写入(从而清空它),然后进程B打开文件以便在进程A完成文件之前读取,如果进程B读取空文件并且代码被写入,则可能导致空文件因此它会写一个空文件。
如果没有更多信息(例如,错误日志),任何答案都可能是纯粹的猜测工作。但这些是我要检查的两件事。