如何正确地取消管道 nodejs 流



我试图弄清楚为什么如果流在.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");

但这种方法感觉像个坏主意。

尝试在管道后挂接数据事件。

挂接数据事件会导致管道开始流动。

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");

相关内容

  • 没有找到相关文章

最新更新