我有一个应用程序,该应用程序将其状态保留在磁盘上,当发生任何状态更改时,它将从文件中读取旧状态,然后更改内存中的状态并再次保留在磁盘上。但是,问题在于存储功能仅在关闭程序后才在磁盘上写入。我不知道为什么?
const load = (filePath) => {
const fileBuffer = fs.readFileSync(
filePath, "utf8"
);
return JSON.parse(fileBuffer);
}
const store = (filePath, data) => {
const contentString = JSON.stringify(data);
fs.writeFileSync(filePath, contentString);
}
要创建一个完整的示例,我们在文件“ src / interpreter / index.js”中使用load-dataset
命令。
while(this.isRunning) {
readLineSync.promptCL({
"load-dataset": async (type, name, from) => {
await loadDataset({type, name, from});
},
...
}, {
limit: null,
});
}
通常,这将调用loadDatasets
,该文件将读取json
或csv
个文件。
export const loadDataset = async (options) => {
switch(options.type) {
case "csv":
await readCSVFile(options.from)
.then(data => {
app.createDataset(options.name, data);
});
break;
case "json":
const data = readJSONFile(options.from);
app.createDataset(options.name, data);
break;
}
}
方法createDataset()
读取磁盘上的文件,对其进行更新并再次写入。
createDataset(name, data) {
const state = loadState();
state.datasets = [
...state.datasets,
{name, size: data.length}
];
storeState(state);
const file = loadDataset();
file.datasets = [
...file.datasets,
{name, data}
];
storeDataset(file);
}
方法loadState(), storeState(), loadDataset(), storeDataset()
使用初始方法的地方。
const loadState = () =>
load(stateFilePath);
const storeState = state =>
store(stateFilePath, state);
...
const loadDataset = () =>
load(datasetFilePath);
const storeDataset = dataset =>
store(datasetFilePath, dataset);
我正在使用来自npm
的名为readline-sync
的软件包创建一个简单的“终端”,我不知道它是否会引起一些冲突。
源代码位于Github中:Git repo。在文件“ index.js”中,方法createDataset()
调用loadState()
和storeState()
,它们都使用上面显示的方法。
在解释器(此处为Interpreter file)中使用了软件包readline-sync
,该软件包基本循环直到退出命令为止。
请注意,我正在使用Ubuntu 18.04.2和Node.js 10.15.0。为了编写此代码,我在YouTube Video中看到了一个示例。这个家伙正在使用MAC OS X,我真的希望系统不会出现问题。