管理事件处理程序和使用 readable.pipe(writable) 最重要的区别在于使用管道:
数据流将被自动管理,以便目标 Writable 流不会被更快的 Readable 流淹没。 Pipe
这意味着可读流可能比可写流更快,并且管道处理该逻辑。如果您正在编写如下代码:
responseHandler.on('data', (chunk) => {
res.write(chunk);
});
res.write() 函数
返回:(布尔值)如果流希望调用代码在继续写入其他数据之前等待“drain”事件发出,则为 false;否则为真。 Link
这意味着可写流可能还没有准备好处理更多数据。因此,您可以按照 writable.write() 示例中的说明手动管理它。
在某些情况下,您没有可读流,您可以使用 writable.write() 写入可写流。
示例
const data = []; // array of some data.
data.forEach((d) => writable.write(d));
但是,您必须再次查看 writable.write 返回的内容。如果它是假的,你必须以手动方式调整流量。
另一种方法是将数据包装到可读流中并通过管道传输。
顺便说一句,使用管道还有一个很大的优势。您可以根据需要将它们链接起来,例如:
readableStream
.pipe(modify) // transform stream
.pipe(zip) // transform stream
.pipe(writableStream);
通过总结一切如果可能的话,在 node.js 上提供管理流的功能。在大多数情况下,它会帮助您避免额外的复杂性,并且与手动管理相比,它不会变慢。