我有一个对象流(objectMode: true
),并希望将其分块为相同大小的数组,以便我可以将它们传递给另一个接受数组的函数。我发现以下模块似乎可以实现缓冲区,但不适用于对象:
您是否知道可以为对象流执行此操作的模块,或者是否有明显简单的DIY解决方案?
答案 0 :(得分:3)
我找到了以下工作:
function ItemCollector (chunkSize) {
this._buffer = [];
this._chunkSize = chunkSize;
stream.Transform.call(this, { objectMode: true });
}
util.inherits(ItemCollector, stream.Transform);
ItemCollector.prototype._transform = function (chunk, encoding, done) {
if (this._buffer.length == this._chunkSize) {
this.push(this._buffer);
this._buffer = [];
}
this._buffer.push(chunk);
done();
};
ItemCollector.prototype._flush = function () {
this.push(this._buffer);
};
像这样使用:
objectStream.pipe(new ItemCollector(10)).pipe(otherFunction)