理解异步Javascript代码
最近,我开始通过练习学习Node.js。但我在理解这个问题的解决方案时遇到了问题:理解异步Javascript代码,javascript,node.js,Javascript,Node.js,最近,我开始通过练习学习Node.js。但我在理解这个问题的解决方案时遇到了问题: Your program will get some html written to stdin. Convert all the inner html to upper-case for elements with a class name of "loud". 官方解决方案是: var trumpet = require('trumpet'); var through = require('through'
Your program will get some html written to stdin. Convert all the inner html to
upper-case for elements with a class name of "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);
我不明白的是这部分:
process.stdin.pipe(tr).pipe(process.stdout);
此代码不使用loud变量输出解决方案。谁能给我解释一下这个魔法密码吗
注:我是从PHP来到Node.js的,在理解异步Javascript时遇到了问题。我也遇到了类似的困惑,并帮助我解决了问题
我想你可能把这两条流混为一谈了
tr
是主喇叭流
- 它是一个转换流(具有像管道一样的输入和输出)
- 它以html作为输入
- 它输出html
- 我们将
连接到它的输入端,将它的输出端连接到stdin
stdout
loud
是另一个流,我们通过要求tr
选择带有classloud
html元素来创建loud
- 它是一个双工流(具有像电话一样的输入和输出)
- 它输出或发送html元素
- 它还接收html元素
tr
的行为是,当html流式传输到它时,如果有classloud
的元素,它们将从loud输出,loud通过您为使文本大写而构建的流将它们发送回loud
的输入,将它们重新插入最初从tr
接收和输出的htmltr
我想需要注意的一件重要事情是,尽管大声
与tr
有着重要的联系,但它们实际上根本没有通过管道连接在一起
虽然
tr
和loud
是绝对连接的,但是连接不是很清楚,它与我们在这里看到的管道没有关系
您确实希望将html发送回tr
,但我们通过将其发送回loud
来实现这一点。发送到tr
的输入部分的任何内容都被解释为要处理的新html,因此我们无法发送到tr
的输入部分。取而代之的是,我们发送到loud
的输入端,它通过喇叭内部的一些魔法,使它从tr
输出
单独考虑流量可能会有所帮助:
stdin
(进行某种处理)>tr
stdout
大声
通过
大声
tr
和loud
都是双工流,这意味着它们都有输入和输出,但它们的作用方式却截然不同
tr
接收输入,然后作为结果发送输出
loud
发送一个输出,并等待输入作为结果到达
如果你愿意,你可以把想象成两个流,一个读一个写,而不是一个读/写流。这使它看起来更像stdin
和stdout
loudout
>通过loudin
loud
绝对知道,当它接收到输入时,它应该将其传回tr,这恰好是喇叭内部的,这让它有点神秘您可能应该阅读喇叭
的文档,因为这似乎是您不理解的模块。