当我读/写同一个文件时会发生什么?

时间:2011-09-22 19:20:18

标签: node.js

我正在学习NodeJS的事件模型。

我对输出感到困惑。

代码只是将一些文本写入文件并将其读回。 执行顺序似乎超出了我的控制范围。

var fs = require('fs');  
var ws = fs.createWriteStream("my_file.txt");  
ws.once('open', function(fd) {  
  console.log( 'ws_open' );  
  ws.write("My first row\n");  
  ws.write("My second row\n");  
  ws.write("My third row\n");  
  ws.destroySoon();  
});  

ws.once('close', function() {  
  console.log( 'ws_close');  
});  

var rs = fs.createReadStream("my_file.txt");  
rs.setEncoding('utf8');  
rs.once('open', function(fd) {  
  console.log( 'rs_open' );  
});  
rs.once('close', function() {  
  console.log( 'rs_close');  
});  

rs.once('data', function(data) {  
  console.log( 'rs_data' );  
  console.log( data );  
});  

rs.once('error', function(exception) {  
  console.log( 'rs_exception' );  
  console.log( exception );  
});  

这是输出。

  

rs_open
  ws_open
  rs_close
  ws_close

有时候会变成

  

ws_open
  rs_open
  rs_data
  我的第一行

     

rs_close
  ws_close

有人可以给我一些解释吗?

提前感谢。

1 个答案:

答案 0 :(得分:2)

你正在做异步的事情,好像它是同步的。仅仅因为代码中的某些东西较低并不意味着它会在以后发生。如果您在完成编写之前不想读取文件,请将读取内部写入回调。

如:(简化)

writeFile (name, writeData, function (error) {
  if (error)
    .... // handle error
  else { // successfully wrote file
   readFile(name, function (error, readData) {
     if (error) 
        .... // handle error
     else { // successfully read file
       ... // do something with readData
     }
    });
  }
 });