我正在编写一个节点js程序来读取文件中的内容,我在短时间内多次执行该程序。有时我可以看到文件内容,有时候我没有(PFA截图),有人可以解释为什么会这样吗?这是因为我没有使用承诺吗?
var fs= require('fs');
fs.readFile('myData.json', (err, data) => {
if(err)
console.log('Error Found',err.code);
else {
console.log('inside else');
fs.open('myData.json', 'wx', (err, fd) => {
console.log('inside open file');
fs.writeFile('myData.json','test data',(err)=>{
if(err) console.log('error writing data');
});
fs.readFile('myData.json','utf8',(err, data) => {
console.log('read file'+data);
});
});
}
});
屏幕截图:
答案 0 :(得分:2)
您可以在修复以下代码后尝试
fs.writeFile('myData.json','test data',(err)=>{
if(err) console.log('error writing data');
fs.readFile('myData.json','utf8',(err, data) => {
console.log('read file'+data);
});
});
您已将read文件与write file放在异步中。编写后需要读取文件。
答案 1 :(得分:2)
fs.readFile
和fs.writeFile
是异步的。在调用writeFile后立即启动readFile。这意味着writeFile可能会或可能不会(可能没有)在readFile执行之前有时间完成。
尝试将readFile放在writeFile回调中。异步函数完成后调用回调,因此它允许您以同步方式处理代码。
我不确定readFile - >打开 - > writeFile - >但是,readFile逻辑很有意义。
答案 2 :(得分:2)
使用最新的Node.js v9.2.0 Documentation
fs.writeFile(file, data[, options], callback)
...
异步将数据写入文件,如果文件已经替换,则替换该文件 存在。数据可以是字符串或缓冲区。
由于你想编写文件同步,你应该使用
fs.writeFileSync(file, data[, options])
...
fs.writeFile()
的同步版本。返回undefined。