如何考虑Node.js中的异步回调操作

时间:2014-11-14 04:18:27

标签: javascript node.js

  

Learnyounode是一个基于命令行的基于学习的,通过javascript的节点获得结果测试的教程

在第七个教程中,我们的想法是使用node.js的http的get函数创建一个http客户端。

get函数有两个参数

  1. 网址
  2. 异步作业的回调函数
  3. 所以我在互联网的表面上寻找一种方法来持续接受数据直到操作结束。过了一会儿,看到每个答案几乎都是

          function callback(res){
    
               res.on("data",function (data) { console.log(data.toString());})
       }
    
    
      http.get(url,callback)
    

    我想也许失败的内置测试会给我一个线索,看看如何进行多次调用但奇怪的是它通过多次调用test.So我认为测试调用文件,因此函数,多次..但经过一些尝试......我意识到情况并非如此。

    所以我的问题:异步调用背后究竟发生了什么?该机制如何不止一次调用它?我还有什么惊喜?对我来说,这是把黑盒子思考到一个全新的水平,我把它与思考列表monad atm放在一起。

1 个答案:

答案 0 :(得分:1)

我认为关键是要理解res是一个EventEmitter(IncomingMessage更准确),那么该函数名为callback(在httpClientRequest对象的response事件上只有一次)您在调用http.get()时创建的是将事件侦听器附加到res的data事件。在不详细说明的情况下,为了优化数据流,当您从网络接收到一些数据字节时,缓冲区将被填充,当填满时会触发事件“数据”,以便您可以处理传入的块。因此,您设置为data事件的回调将在来自网络的每个数据块上执行