如果流在 .pause
之后通过管道传输,我试图弄清楚为什么 .unpipe
调用是空操作:
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");
但这种方法感觉像是个坏主意。
最佳答案
尝试在管道后连接数据事件。
Hook 数据事件导致管道开始流动。
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");
关于node.js - 如何正确地 unpipe nodejs 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27945357/