我见过一些像这样的代码:
.on('error', console.error)
.on('data', function (data) {})
.on('info', function(info) {})
.on('end', function() {
// All data retrieved.
});
我已经阅读了一些关于流的文档,但我很难理解它们。假设我只想在收到所有数据后进行操作(非部分)。我怎样才能做到这一点?我认为我必须读取'end'函数内部的数据对象,但是无法从那里访问数据对象。
根据我的理解,如果我在“数据”功能中加入一些逻辑,我可能会对不完整的数据进行操作?这是真的?假设数据是朋友列表(某些列表有1个朋友,有些可以有10,000个,因此返回的数据大小会有所不同)。无论返回的数据大小如何,一旦所有朋友都被退回,我怎么才能进行操作?
答案 0 :(得分:2)
data
处理程序通常会被多次调用,每次都只有完整数据的一小部分。
如果您想使用所有数据执行一次操作,通常的方法如下:
将data
处理程序中收到的所有项目缓存在某个变量中(例如添加到数组中)并在end
处理程序中执行最终操作。 (尽管流的概念自然就是“立即行动”。
var allData = [];
stream
.on('error', console.error)
.on('data', function (data) {
allData.push(data);
})
.on('info', function(info) {})
.on('end', function() {
// TODO do something more intelligent,
// where buffering in memory makes sense
console.log(allData.join());
});