节点JS同步事件

时间:2017-12-05 14:20:53

标签: javascript node.js asynchronous

我正在编写一个节点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);
      });
    });
  }
});

屏幕截图:

enter image description here

3 个答案:

答案 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.readFilefs.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。