将 WriteStream 转换为 TransformStream
Converting WriteStream to TransformStream
我有一个(有点奇怪的)可写流,我需要将其转换为转换流。
可写流通常位于管道链的末尾,并在收集到足够的数据用于输出后发出自定义事件。我想让它放在中间,这样我就可以将它传送到另一个 writeStream,即:
readStream.pipe(writeStreamToConvert).pipe(finalWriteStream);
我所做的如下,并且有效。
const through2 = require('through2')
var writeStreamToConvert = new WriteStreamToConvert();
return through2.obj(function (chunk, enc, callback) {
writeStreamToConvert.write(chunk)
// object is the event emitted from the writestream
writeStreamToConvert.on('object', (name, obj ) => {
this.push(JSON.stringify(obj, null, 4) + '\n')
});
callback()
})
这工作正常,似乎没有泄漏内存,而且速度相当快。但是节点给我一个警告:
Warning: Possible EventEmitter memory leak detected. 11 object listeners added. Use emitter.setMaxListeners() to increase limit
所以我有点好奇这是否是转换 writestream 的正确方法?
事件处理程序最好放在转换流构造函数中。由于 through2
不支持这样的初始化,您需要直接使用节点的流 API。
目前,正在为每个写入 through2
流的对象添加一个新的事件处理程序(永远不会删除 -- 这就是 .on()
的工作方式)。这就是出现警告的原因。
我有一个(有点奇怪的)可写流,我需要将其转换为转换流。
可写流通常位于管道链的末尾,并在收集到足够的数据用于输出后发出自定义事件。我想让它放在中间,这样我就可以将它传送到另一个 writeStream,即:
readStream.pipe(writeStreamToConvert).pipe(finalWriteStream);
我所做的如下,并且有效。
const through2 = require('through2')
var writeStreamToConvert = new WriteStreamToConvert();
return through2.obj(function (chunk, enc, callback) {
writeStreamToConvert.write(chunk)
// object is the event emitted from the writestream
writeStreamToConvert.on('object', (name, obj ) => {
this.push(JSON.stringify(obj, null, 4) + '\n')
});
callback()
})
这工作正常,似乎没有泄漏内存,而且速度相当快。但是节点给我一个警告:
Warning: Possible EventEmitter memory leak detected. 11 object listeners added. Use emitter.setMaxListeners() to increase limit
所以我有点好奇这是否是转换 writestream 的正确方法?
事件处理程序最好放在转换流构造函数中。由于 through2
不支持这样的初始化,您需要直接使用节点的流 API。
目前,正在为每个写入 through2
流的对象添加一个新的事件处理程序(永远不会删除 -- 这就是 .on()
的工作方式)。这就是出现警告的原因。