2017-11-26 8 views
2

nodejsのパイプに関する質問があります。私は現在のディレクトリにファイルのリストを表示する必要がありますが、予期せず動作するいくつかのコードがあります。nodejsとストリームpiping

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); 
    }); 
}); 

まず、正しい作業のためにコードを変更する方法を知っています。このコードがなぜこのように機能するのかを理解したいだけです。

コードはシンプルで書き込み可能なストリームの1つで、ループ内の多くの読み取り可能なストリームは、PassTroughを通じてデータを書き込む必要があります。 パイプを外すと、すべて正常に動作します。私は現在のディレクトリにあるファイルのリストを参照してください。しかし、パイプでは、ディレクトリ+ 1にあるファイルの数だけ、すべての名前が複製されます。

なぜファイル名がパイプで複製されるのですか?

答えて

0

私は答えがあります。これは、同じオブジェクトの両方の場合に「合格」であり、書き込みのためにパイプされたストリーム(この場合は2つ以上の同じストリーム)を2つ(またはそれ以上、ファイル数に依存する)のストリームがあるからです。

関連する問題