一旦所有数据准备就绪,如何访问数据

时间:2016-05-13 22:57:58

标签: node.js stream

我见过一些像这样的代码:

  .on('error', console.error)
  .on('data', function (data) {})
  .on('info', function(info) {})
  .on('end', function() {
    // All data retrieved.
  });

我已经阅读了一些关于流的文档,但我很难理解它们。假设我只想在收到所有数据后进行操作(非部分)。我怎样才能做到这一点?我认为我必须读取'end'函数内部的数据对象,但是无法从那里访问数据对象。

根据我的理解,如果我在“数据”功能中加入一些逻辑,我可能会对不完整的数据进行操作?这是真的?假设数据是朋友列表(某些列表有1个朋友,有些可以有10,000个,因此返回的数据大小会有所不同)。无论返回的数据大小如何,一旦所有朋友都被退回,我怎么才能进行操作?

1 个答案:

答案 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());
});