了解节点流操作顺序



我正在使用Stream-Adventure(https://github.com/substack/stream-adventure)学习Node Streams。我很难理解 HTML 流课程。

这是挑战:

你的程序将得到一些写入标准格式的html。转换所有 内部 HTML 到大写,用于类名为"loud"的元素。

您可以使用trumpetthrough来解决此冒险。

我在这里找到了解决方案:

var trumpet = require('trumpet');
var through = require('through');
var to_upper = function (buffer) {
  this.queue(buffer.toString().toUpperCase())
};
var tr = trumpet();
// Here I expect the output to stdout to have printed as is.
process.stdin.pipe(tr).pipe(process.stdout);
// In the below lines, there is no reference to the above stream 
// which should have already started to send to stdout.
// How are the lines below modifying the above stream?
var stream = tr.select('.loud').createStream()
stream.pipe(through(to_upper)).pipe(stream)

我似乎无法理解上面的程序流程。

即使没有引用/回调来使用上面的流,最后两行如何修改流输出?

关键是异步思考。process.stdin.pipe(tr).pipe(process.stdout)可以想象为"将输入输入通过tr,我们稍后会详细说明,然后打印到stdout"。

然后在下面我们填写逻辑并准确说明tr将对输入执行的操作。此程序中只有一个tr对象。stream对象是根据它定义的。在底部使用stream的代码正在操作用于过滤stdinstdout的相同tr。请记住提示 Now stream'.beep'处输出所有内部 html 内容,并且您写入stream的数据将显示为新的内部 html 内容。这正是最后一行正在做的事情。

相关内容

  • 没有找到相关文章

最新更新