如何将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的摘录
我想你可能会混淆两个streamloud
和tr
。
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,它们被重新插入到最初接收到的tr
和tr
。
我想重要的一点是,尽pipeloud
与tr
有重要的联系,但实际上并没有真正的联合在一起。
我也很困惑,我会用我的话再次expression:
tr.select('.loud').createStream()
创build一个Duplex-Stream,它是一个组合的ReadStream
和WriteStream
该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);
请纠正我,如果我错了!