node.js - 如何正确地 unpipe nodejs 流

标签 node.js stream pipe duplex

如果流在 .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/

相关文章:

c# - 需要关闭网络请求流吗?

c++ - 在 C++ 中寻找 MemoryStream

stream - Elixir:流式传输

javascript - Firebase云功能-获取父 Node ,同时监听子 Node 的更改

javascript - jade 中无法解释的 "<"和双输出包括

创建 n 个 child ,每个 child 都有自己的管道

c - 使用共享内存和信号量实现管道

python - 从 stdout 获取原始流数据到 python 程序

node.js - Angularjs+nodejs+passport跨域请求

php - nginx + nodejs + php