Learnyounode is a commandline based learn-by-doing-and-getting-your-results-tested tutorial for javascript's node
在第七个教程中,我们的想法是使用 Node.js 的 http 的 get 函数制作一个 http 客户端。
get 函数有两个参数
- 网址
- 异步作业的回调函数
所以我在互联网上搜寻一种方法来持续接受数据直到操作结束。一段时间后,发现每个答案都差不多是这样的
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/