如何将流回流到自身与Trumpet一起工作?

gdb*_*dbj 17 javascript node.js

学习node.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);
Run Code Online (Sandbox Code Playgroud)

Jos*_* Mu 19

我有同样的困惑:

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


我想你可能会混淆两个流loudtr.

tr 是主要的小号流

  • 它是一个变换流(具有像管道一样的输入和输出)
  • 它需要html作为输入
  • 它输出html
  • 我们连接stdin到它的输入,我们将其输出连接到stdout

我们loud通过要求tr选择类大声的html元素来创建

  • 它是双工流(具有像电话一样的输入和输出)
  • 它输出或发送html元素
  • 它还接收html元素

tr行为是这样的,当html被流式传输到它时,如果有类大声的元素,则输出它们loud,将它们发送到你为了使文本大写而构建loud的直流,然后将它们发送回到输入,其中将它们重新插入tr最初收到并输出的html中tr.

我想要注意的一件重要的事情是,虽然loud它有重要的联系tr,但它们实际上并没有用管道连接在一起.


  • 这是一个很好的解释!你能为小号文件做贡献吗? (2认同)