我想用管道传输两个流-都是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的可读接口,我认为这是不可能的。