javascript - 如何思考 Node.js 中的异步回调操作

标签 javascript node.js

Learnyounode is a commandline based learn-by-doing-and-getting-your-results-tested tutorial for javascript's node

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

get 函数有两个参数

  1. 网址
  2. 异步作业的回调函数

所以我在互联网上搜寻一种方法来持续接受数据直到操作结束。一段时间后,发现每个答案都差不多是这样的

      function callback(res){

           res.on("data",function (data) { console.log(data.toString());})
   }


  http.get(url,callback)

我想也许内置测试失败会给我一个线索,让我了解如何进行多次调用,但奇怪的是它通过了多次调用测试。所以我认为测试多次调用文件,从而调用函数..但是经过一番尝试......我意识到事实并非如此。

所以我的问题:异步调用背后到底发生了什么?该机制怎么可能多次调用它?我还应该期待什么其他惊喜?对我来说,这将黑盒思维提升到了一个全新的水平,我将其与列表单子(monad) atm 的思考相提并论。

最佳答案

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

关于javascript - 如何思考 Node.js 中的异步回调操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26922814/

相关文章:

javascript - 将参数从 HTML 传递给 AJAX 函数

javascript - Chart.js - 沿 x(时间)轴合并天数到月数的总计?

mysql - 当行值不等于特定值时更新表

android - Nodejs 是否可以通过 Web 应用程序读取已连接设备的系统日志?

javascript - OpenAI gpt-3.5-turbo : Request failed with status code 400

javascript - 如何使该代码块在其后的其他代码之前完成执行?

javascript - Jquery 自动完成库从 PHP 脚本返回没有属性的数组

Node.js Cookie 解析器停止加载页面

node.js - PostgreSQL中未提交或回滚的事务中免费连接的理想时间是什么时候

node.js - NodeJS - 没有 EXPRESS - 如何获取查询参数?