2015-01-14 3 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() звонок. Но важно, чтобы поток был приостановлен до тех пор, пока все потоки не будут переданы. Как я могу решить эту проблему элегантным способом?

Существует возможность для подключения прослушивателя событий «данных» к источнику потока в качестве функции записи целевого потока.

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"); 
Смежные вопросы