Javascript 用喇叭将水流吹回自身是如何工作的?

Javascript 用喇叭将水流吹回自身是如何工作的?,javascript,node.js,Javascript,Node.js,学习节点.js。显然,小号的工作原理是通过管道将流传回自身,这样处理后的数据就可以输出了。这对我来说毫无意义,因为这似乎就像是将一条流的两端连接到它自己。如何区分预处理数据和后处理数据?也就是说,为什么loud.pipe(…).pipe(loud)不会导致某种形式的无限处理循环 var trumpet = require('trumpet'); var through = require('through'); var tr = trumpet(); var loud = tr.select(

学习节点.js。显然,小号的工作原理是通过管道将流传回自身,这样处理后的数据就可以输出了。这对我来说毫无意义,因为这似乎就像是将一条流的两端连接到它自己。如何区分预处理数据和后处理数据?也就是说,为什么
loud.pipe(…).pipe(loud)
不会导致某种形式的无限处理循环

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

我也有同样的困惑:

DaveCoa在github的nodeschool.io讨论线程上对我说了这句话。 下面是一个摘录


我想你可能把这两条流混为一谈了

tr
是主喇叭流

  • 它是一个转换流(具有像管道一样的输入和输出)
  • 它以html作为输入
  • 它输出html
  • 我们将
    stdin
    连接到它的输入端,将它的输出端连接到
    stdout
我们通过要求
tr
使用loud类选择html元素来创建
loud

  • 它是一个双工流(具有像电话一样的输入和输出)
  • 它输出或发送html元素
  • 它还接收html元素
tr
的行为方式是,当html流式传输到它时,如果有类为loud的元素,它们将从
loud
输出,这会将它们发送到为使文本大写而构建的直通流,这会将它们发送回
loud
的输入,将它们重新插入最初从
tr
接收和输出的html
tr

我想需要注意的一件重要事情是,尽管
大声
tr
有着重要的联系,但它们实际上根本没有通过管道连接在一起



我也很困惑,我想用我的话再次表达:

tr.select('.loud').createStream()
创建一个双工流,它只不过是一个组合的
ReadStream
WriteStream

此流接收其ReadStream中的所有匹配项。 如果您向WriteStream写入,则喇叭会将其视为匹配替换

这对我来说也是一样的:

//创建小号流
var tr=喇叭();
//使用选定元素创建流
var trumpetSelector=tr.select('.loud');
var upperOut=trumpetSelector.createReadStream();
var upperIn=trumpetSelector.createWriteStream();
upperOut.pipe(新的UpperCase Transformer()).pipe(upperIn);

如果我错了,请纠正我

这是一个很好的解释!你能为小号文档做些贡献吗?