将可读流中的数据收集到变量中
Collect data from a readable stream into a variable
我正在尝试实现一个可写流,它将写入的数据保存到一个变量中。这是可写流的实现:
var util = require('util');
var Writable = require('stream').Writable;
function Collector()
{
Writable.call(this, {objectMode: true});
this.entities = [];
};
util.inherits(Collector, Writable);
Collector.prototype._write = function (chunk, encoding, callback)
{
this.entities.push(chunk);
callback();
};
module.exports = Collector;
这就是我尝试对其进行测试的方式:
var fs = require('fs');
var Tokenizer = require('./tokenizer');
var Processor = require('../parser');
var Collector = require('./collector.js');
var tokenizer = new Tokenizer();
var processor = new Processor();
var collector = new Collector();
var readable = fs.createReadStream('./test/fixtures/test.dxf');
readable.pipe(tokenizer)
.pipe(parser)
.pipe(processor); // if this is piped to stdout, lots of data
console.log(collector.entities); // logs an empty array
我不确定为什么,但是实体 属性 在通过管道传输之后是空的。如果我在 _write
函数中控制台记录 this.entities
,则数据可用。
最终我想调用一个函数,该函数 return 是一个数组,其元素由 Processor
中的数据块组成。 Collector
想看看我是怎么做到的,但我还没走多远。
如何将可读流中的块存储到变量中,然后 return 从函数中存储它们?
它 returns 空数组,因为您的流式传输尚未完成。您应该收听 finish 事件,以便正确获取您的实体数组:
var fs = require('fs');
var Tokenizer = require('./tokenizer');
var Processor = require('../parser');
var Collector = require('./collector.js');
var tokenizer = new Tokenizer();
var processor = new Processor();
var collector = new Collector();
var readable = fs.createReadStream('./test/fixtures/test.dxf');
readable.pipe(tokenizer)
.pipe(parser)
.pipe(processor)
.on('finish', function() {
console.log(collector.entities);
});
我正在尝试实现一个可写流,它将写入的数据保存到一个变量中。这是可写流的实现:
var util = require('util');
var Writable = require('stream').Writable;
function Collector()
{
Writable.call(this, {objectMode: true});
this.entities = [];
};
util.inherits(Collector, Writable);
Collector.prototype._write = function (chunk, encoding, callback)
{
this.entities.push(chunk);
callback();
};
module.exports = Collector;
这就是我尝试对其进行测试的方式:
var fs = require('fs');
var Tokenizer = require('./tokenizer');
var Processor = require('../parser');
var Collector = require('./collector.js');
var tokenizer = new Tokenizer();
var processor = new Processor();
var collector = new Collector();
var readable = fs.createReadStream('./test/fixtures/test.dxf');
readable.pipe(tokenizer)
.pipe(parser)
.pipe(processor); // if this is piped to stdout, lots of data
console.log(collector.entities); // logs an empty array
我不确定为什么,但是实体 属性 在通过管道传输之后是空的。如果我在 _write
函数中控制台记录 this.entities
,则数据可用。
最终我想调用一个函数,该函数 return 是一个数组,其元素由 Processor
中的数据块组成。 Collector
想看看我是怎么做到的,但我还没走多远。
如何将可读流中的块存储到变量中,然后 return 从函数中存储它们?
它 returns 空数组,因为您的流式传输尚未完成。您应该收听 finish 事件,以便正确获取您的实体数组:
var fs = require('fs');
var Tokenizer = require('./tokenizer');
var Processor = require('../parser');
var Collector = require('./collector.js');
var tokenizer = new Tokenizer();
var processor = new Processor();
var collector = new Collector();
var readable = fs.createReadStream('./test/fixtures/test.dxf');
readable.pipe(tokenizer)
.pipe(parser)
.pipe(processor)
.on('finish', function() {
console.log(collector.entities);
});