你如何将一个可读stream传递给另一个可读stream?
我正在从“stream冒险”做练习, stream-combiner
模块我很不确定。
具体来说就是说:
stream-combiner
模块根据stream-combiner
列表创buildstream水线,返回单个stream,其将第一stream暴露为可写侧,将最后stream暴露为可读侧(如duplexer
模块),但具有任意数量的stream之间的stream。 与duplexer
模块不同,每个stream都被传送到下一个。 例如:var combine = require('stream-combiner'); var stream = combine(a, b, c, d);
将在内部执行
a.pipe(b).pipe(c).pipe(d)
但由combine()
返回的stream
combine()
其可写侧挂钩到a
并将其可读侧挂钩到d
。
现在,正如它所说的,“它的可写入端被钩入a
可读的端,并被钩入了d
”,可以使用如下的stream
:
someReadableStream.pipe(stream).pipe(someWritableStream)
但是上面不会变成:
someReadableStream.pipe(a).pipe(b).pipe(c).pipe(d).pipe(someWritableStream)
我的问题是如何可读的streampipe道到另一个可读的stream。 最后,如何将可写入stream的pipe道再次输送到可写入的stream中。
下面是一个文本示例,希望澄清有关stream的规则,以便stream合并器执行一些有用的操作:
var rw = combine(r_or_rw, rw1, rw2, rw3, ...rwN, w_or_rw)
所以第一个stream需要至less是可读的,内部stream都需要读/写,最后stream至less需要可写。 返回的新stream是可读写的。 当你写入返回的stream时,通过pipe道向下发送新的数据,当你读到这个数据时,你会从stream水线的末端给出数据。
readable.pipe(a).pipe(b).pipe(c).pipe(d).pipe(writable)
,组合器的优点是你不能返回a.pipe(b).pipe(c).pipe(d)
从一个函数,所以你必须总是手动连接它们。 与组合器,你可以创build一个stream从其他stream,然后整理到一个function或模块。
为此,a,b,c,d都必须是可读写的转换stream。