2017-07-28 54 views
1

我新的節點,我正在研究有關事件發射器,我創建了一個演示程序節點事件發射

var eventEmitter = new event.EventEmitter(); 
var fs = require("fs"); 
var data = ''; 

var read = fs.createReadStream("demo.txt"); 
read.setEncoding('UTF8'); 

read.on('data', function(resp) { 
    console.log(resp); 
}); 

data='some data'; 
var writeStream = fs.createWriteStream("demo.txt"); 
writeStream.write(data,'UTF8'); 
writeStream.end(); 
writeStream.on('finish',function(){ 
    console.log("finish"); 
}); 

所以輸出「完成」,但如果我寫流之後寫讀流輸出是'完成一些數據',所以爲什麼讀取流如果我先把它寫出來就不會產生輸出。

PS:我已經有了正確提到的,你應該先寫文件的文件

+1

當您初始化讀取流,它立即開始流動。如果該文件在那個時候是空的(或者甚至還不存在),那麼它完成並且沒有任何可讀的。它不會繼續觀察文件並等待更多數據顯示在文件中。它讀取了什麼,然後完成了它。 – jfriend00

+0

但文件在那裏,數據也在那裏,如果我刪除它的寫入流 –

+0

只要流不按預期工作,爲'error'事件添加一個事件處理程序,並看看你得到什麼。 – jfriend00

回答

1

正如@ jfriend00中的數據,那麼你就可以讀取它。

const fs = require("fs"); 

var writeStream = fs.createWriteStream("demo.txt"); 
writeStream.write('some data','UTF8'); 
writeStream.end(); 
writeStream.on('finish',function(){ 
    console.log("finish"); 

    let data = ''; 

    const read = fs.createReadStream("demo.txt", {encoding: 'UTF8'}); 

    read.on('data', function(resp) { 
    console.log(resp); 
    data += resp; 
    }); 
}); 

所以,幾個點這裏:

  • 你不實際使用上發射事件在這個例子中你自己的
  • 您可以直接設置在createReadStream方式進行編碼