将两个流转换为一个流,以便与读和写流进行管道传输



我想用管道传输两个流-都是Transform流。

流1(line2Arr(-将一行转换为对象内部的数组,并将其发送回流

Stream 2(arr2Json(-使用数组获取对象,使用信息创建一个不同的对象,并将其发送回流。

所有这些我都想总结在一个流中(line2JsonStream(这样我就可以做例如:

pipeline(readStream, line2JsonStream, writeStream)

line2JsonStream类需要什么才能做到这一点?是否需要扩展Transform?如果是这样,它到底会返回什么?

当我单独使用它们时pipeline(readStream, line2Arr, arr2Json, writeStream)它们是有效的,但我希望能够将其作为一个单独的流使用,到目前为止我所做的任何事情都不起作用。

当实现line2Arr和arr2Json作为像这样的Transcom的实例时

const line2Arr = new Transform({
transform( chunk, enc, cb ) {
const transformed = doSomeTransformMagic( chunk );
cb( null, transformed );
}
});

你可以做

readStream.pipe( line2Arr ).pipe( arr2Json ).pipe( writeStream )

如果我正确理解你的问题,你想把两个Transform实例压缩成一个Stream,这样你就可以进行

readStream.pipe( line2ArrAndArr2Json ).pipe( writeStream )

我认为使用两个创建的Transform实例line2Arr和arr2Json是不容易实现的。pipe((函数需要一个Writable作为参数,并返回相同的对象。在我们的例子中,这是一个Transform,它还实现了Readable及其pipe((函数。要使上面的代码工作,您需要将line2Arr的可写接口传递给readStream.pipe((,但从readStream.pipe((返回arr2Json的可读接口,我认为这是不可能的。

相关内容

最新更新