Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Notice: Undefined index: in /data/phpspider/phplib/misc.function.php on line 226
理解异步Javascript代码_Javascript_Node.js - Fatal编程技术网

理解异步Javascript代码

理解异步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'

最近,我开始通过练习学习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');

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
选择带有class
loud
html元素来创建
loud

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

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


虽然
tr
loud
是绝对连接的,但是连接不是很清楚,它与我们在这里看到的管道没有关系

您确实希望将html发送回
tr
,但我们通过将其发送回
loud
来实现这一点。发送到
tr
的输入部分的任何内容都被解释为要处理的新html,因此我们无法发送到
tr
的输入部分。取而代之的是,我们发送到
loud
的输入端,它通过喇叭内部的一些魔法,使它从
tr
输出

单独考虑流量可能会有所帮助:

  • stdin
    tr
    (进行某种处理)>
    stdout
  • 大声
    通过
    大声
因此,虽然
tr
loud
都是双工流,这意味着它们都有输入和输出,但它们的作用方式却截然不同

tr
接收输入,然后作为结果发送输出

loud
发送一个输出,并等待输入作为结果到达

如果你愿意,你可以把
想象成两个流,一个读一个写,而不是一个读/写流。这使它看起来更像
stdin
stdout

loudout
>
通过
loudin


loud
绝对知道,当它接收到输入时,它应该将其传回tr,这恰好是喇叭内部的,这让它有点神秘

您可能应该阅读
喇叭
的文档,因为这似乎是您不理解的模块。