Node.js 如何仅在数据全部就绪后访问数据

Node.js 如何仅在数据全部就绪后访问数据,node.js,stream,Node.js,Stream,我见过一些代码,例如: .on('error', console.error) .on('data', function (data) {}) .on('info', function(info) {}) .on('end', function() { // All data retrieved. }); 我读过一些关于流的文档,但理解它们有困难。假设我只想在收到所有数据(而不是部分数据)后执行这些操作。我该怎么做?我想我必须读取'end'函数中的数据对象,但是无法

我见过一些代码,例如:

  .on('error', console.error)
  .on('data', function (data) {})
  .on('info', function(info) {})
  .on('end', function() {
    // All data retrieved.
  });
我读过一些关于流的文档,但理解它们有困难。假设我只想在收到所有数据(而不是部分数据)后执行这些操作。我该怎么做?我想我必须读取'end'函数中的数据对象,但是无法从那里访问数据对象


从我的理解来看,如果我在“数据”函数中加入一些逻辑,我可能会在不完整的数据上操作?这是真的吗?假设数据是一个朋友列表(有些列表有1个朋友,有些可以有10000个朋友,因此返回的数据大小会有所不同)。无论返回的数据大小如何,如何仅在返回所有好友后执行操作?

通常会多次调用
数据处理程序,每次调用的都是完整数据的一小部分

如果要对所有数据执行一次操作,通常的方法如下:

数据
处理程序中接收到的所有项目缓冲在某个变量中(例如,添加到数组中),并在
结束
处理程序中执行最终操作。(尽管溪流的概念自然是立即“行动起来”)


数据
处理程序通常会被调用多次,每次调用一部分完整数据

如果要对所有数据执行一次操作,通常的方法如下:

数据
处理程序中接收到的所有项目缓冲在某个变量中(例如,添加到数组中),并在
结束
处理程序中执行最终操作。(尽管溪流的概念自然是立即“行动起来”)

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