我正在使用Stream-Adventure(https://github.com/substack/stream-adventure)学习Node Streams。我很难理解 HTML 流课程。
这是挑战:
你的程序将得到一些写入标准格式的html。转换所有 内部 HTML 到大写,用于类名为"loud"的元素。
您可以使用
trumpet
和through
来解决此冒险。
我在这里找到了解决方案:
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
的代码正在操作用于过滤stdin
和stdout
的相同tr
。请记住提示 Now stream
在'.beep'
处输出所有内部 html 内容,并且您写入stream
的数据将显示为新的内部 html 内容。这正是最后一行正在做的事情。