在Http.get中,什么'response.on('data')和在javascript中使用
In Http.get, what's the difference between response.on('data') and using the bl library in javascript?
var http = require('http');
var bl = require('bl');
var url = process.argv[2];
http.get(url, function(res) {
res.pipe(bl(function(err, data) {
var dataString = data.toString();
var dataCount = dataString.length
console.log(dataCount);
console.log(dataString);
}));
})
//
// http.get(url, function(res) {
// res.on('data', function(data) {
// var dataString = data.toString();
// var dataCount = dataString.length
// console.log(dataCount);
// console.log(dataString);
// });
// })
这是来自节点学校挑战(learnyounode(。这是练习8。
注释掉的代码输出每个单独的单词,似乎是将数据分解,而不是聚合数据。我试图找到解释这种行为的文档,但我做不到。有人能告诉我们发生了什么吗?
res
是一个可读流,这意味着当它读取了一些数据时,它将发出data
事件。这不一定是所有数据,它可能会被调用多次(直到调用end
事件或error
事件表示出现问题为止(。
这基本上就是bl
所做的(在您的示例中(:它收集所有数据,当所有数据都被读取后,它调用您传递的回调函数
如果没有bl
,代码将如下所示:
http.get(url, function(res) {
var buffers = [];
res.on('data', function(data) {
buffers.push(data);
}).on('end', function() {
var dataString = Buffer.concat(buffers).toString();
var dataCount = dataString.length
console.log(dataCount);
console.log(dataString);
}).on('error', function(err) {
...handle the error...
});
});
换句话说:传入数据收集在buffers
阵列中,当触发end
事件时(意味着所有数据都已读取(,数据缓冲区连接在一起形成最终的数据缓冲区。
相关文章:
- “util.inherits”和在NodeJS中扩展原型之间的区别
- OnsenUI、Angular和在警报对话框后刷新UI组件
- 将JavaScript变量传递到HTML输入框和(在PHP文件中使用)
- 如何区分用户单击链接和在 UIWebView 中执行自动重定向的页面
- 在函数内赋予价值和在函数外赋予价值有什么区别
- CSS 大小相互依赖和在 Chrome 中通过 JS 调整大小:可能的错误
- Sonar Javascript插件错误:“无法装饰”和“在其源文件夹中不包含任何文件”
- 选择选项“重定向获取值”和“在重定向页面上显示”
- jquery,why.data()在internetexplorer中不起作用
- +++ 和 --- 在 JavaScript 中是什么意思?
- node.js和在getInstance中具有异步调用的singleton
- template.data._id在流星中做什么
- LiveSearch PHP,JavaScript和在多个领域的使用
- $scope.$on('$routeChangeSuccess'..) 和在 scope 函数中调用方法
- SEO和在同一页面上与HREF混合重定向
- 如何区分单击提交按钮和在输入中按回车键以提交表单
- 网页代码和在 JavaScript 中不会用替换来更改
- data-stretch在同一视图中的地图和图表的剑道UI中为True/false
- 在Http.get中,什么'response.on('data')和在javascript中使用
- Handelbar js - if和data同时在对象内不工作