2015-01-14 27 views
3

我試圖找出爲什麼.unpipe調用是無操作如果流已.pause之後被管道:unpipe的NodeJS如何正確地流

b.on('data', console.log.bind(console, "on b -> ")); 
c.on('data', console.log.bind(console, "on c -> ")); 

a.pause(); 

a.pipe(b); 
a.pipe(c); 

a.resume(); 

a.unpipe(b); 
a.unpipe(c); 
a.write("foo"); 

打印:

//on b -> foo 
//on c -> foo 

這似乎是因爲撥打.pause()。但重要的是保持流暫停'直到所有流都被管道。 如何以優雅的方式解決此問題?

機會將源流上的'data'事件偵聽器附加爲目標流的寫入函數。

b.on('data', console.log.bind(console, "on b -> ")); 
c.on('data', console.log.bind(console, "on c -> ")); 

writeToB = b.write.bind(b); 
writeToC = c.write.bind(c); 


a.pause(); 

a.on('data', writeToB); 
a.on('data', writeToC); 

a.resume(); 

a.removeListener('data',writeToB); 
a.removeListener('data',writeToC); 

a.write("foo"); 

但是這種方法感覺像壞主意。

回答

0

嘗試在管道後連接數據事件。

連接數據事件會導致管道開始流動。

a.pipe(b); 
a.pipe(c); 

b.on('data', console.log.bind(console, "on b -> ")); 
c.on('data', console.log.bind(console, "on c -> ")); 

a.unpipe(b); 
a.unpipe(c); 
a.write("foo");