nodejs和streampipe道

我有一个关于nodejs中的pipe道的问题。 我有一些代码,应该显示当前目录中的文件的列表,但它意外地工作。

const { Transform, PassThrough, Readable } = require("stream"); const fs = require("fs"); const config = {distPath: '.',scanPath: '.'}; let writeStream = process.stdout; let pass = new PassThrough(); fs.readdir(config.scanPath, (err, files) => { files.forEach(file => { let filename = new Readable(); filename.push(file + "\n"); filename.push(null); filename.pipe(pass).pipe(writeStream); }); }); 

首先,我知道如何改变代码以进行正确的工作。 我只是想明白为什么这个代码工作如此。

代码很简单,只有一个可写入的stream,循环中的许多可读stream想要通过PassTrough写入数据。 如果我将删除pipe道,所有按预期工作。 我看到当前目录中的文件列表。 但是对于pipe道,所有名称都被复制的次数是目录+ 1中的许多文件的次数。

为什么文件名与pipe道重复?

经过一些研究,我有一个答案。 这是因为在两种情况下都是“传递”相同的对象,并且它具有2个(或更多,取决于文件计数)streampipe道写入(在这种情况下,2个或更多相同的stream)。