如何将streampipe道回自己与小号工作?

学习node.js 小号通过将stream传输回自身来工作,显然,所处理的数据可以被输出。 这对我来说是没有意义的,因为它似乎就像将stream的两端连接到自身一样。 小号如何区分处理前后的数据? 即为什么不loud.pipe(...).pipe(loud)导致某种forms的无限循环的处理?

 var trumpet = require('trumpet'); var through = require('through'); var tr = trumpet(); var loud = tr.select('.loud').createStream(); loud.pipe(through(function (buf) { this.queue(buf.toString().toUpperCase()); })).pipe(loud); process.stdin.pipe(tr).pipe(process.stdout); 

我有同样的困惑:

davecocoa在github上的nodeschool.io讨论主题上对我说。 以下是来自https://github.com/nodeschool/discussions/issues/346的摘录


我想你可能会混淆两个streamloudtr

tr是主要的小号stream

  • 它是一个变换stream(具有像pipe道一样的input和输出)
  • 它将html作为input
  • 它输出HTML
  • 我们将stdin连接到它的input,并将其输出连接到stdout

我们通过要求tr loud地selecthtml元素来创build大声

  • 这是一个双工stream(有电话input和输出)
  • 它输出或发送html元素
  • 它也接收html元素

tr行为是这样的,当htmlstream式传输时,如果有大量的类,那么它们会从loud输出,然后将它们发送到您为了使文本变为大写而创build的直通stream,然后将它们发送回loud的input,它们被重新插入到最初接收到的trtr

我想重要的一点是,尽pipeloudtr有重要的联系,但实际上并没有真正的联合在一起。


我也很困惑,我会用我的话再次expression:

tr.select('.loud').createStream()创build一个Duplex-Stream,它是一个组合的ReadStreamWriteStream

该stream接收其ReadStream中的所有匹配 。 如果您写入WriteStream,小号会将其作为匹配replace

这对我来说也是一样:

 // create trumpet stream var tr = trumpet(); // create stream with selected elems var trumpetSelector = tr.select('.loud'); var upperOut = trumpetSelector.createReadStream(); var upperIn = trumpetSelector.createWriteStream(); upperOut.pipe(new UpperCaseTransformer()).pipe(upperIn); 

请纠正我,如果我错了!