2017-12-15 20 views
0

私は、画像操作サービスを書いていますし、私は複数のサイズNodejsで多重ストリームを扱うには?

const writable1 = storage(name1).writableStream(); 
const writable2 = storage(name2).writableStream(); 
const writable3 = storage(name3).writableStream(); 

//piping the file stream to their respective storage stream 
file.stream.pipe(imageTransformer).pipe(writable1); 
file.stream.pipe(imageTransformer).pipe(writable2); 
file.stream.pipe(imageTransformer).pipe(writable3); 

私は今、私は唯一のためにチェックして、宛先

に書き込むすべてのストリームが終了したら、知りたいに画像を変換する必要があります1つのストリームのように:

writable3.on('finish', callback); 
//error handling 
writable3.on('error', callback); 

私はhttps://github.com/mafintosh/pumphttps://github.com/maxogden/mississippiのようなライブラリを見てきましたが、これらのライブラリは、複数のトランと単一の宛先への書き込みを表示しますsforms。

すべてのストリームの書き込みが終了したか、そのうちの1つがエラーを起こしているかどうかを確認するにはどうすればよいですか?どのように配列でそれらを扱うことができますか?

+1

あなたは約束する必要があります。これは役立つ可能性がありますhttps://www.npmjs.com/package/pipe-streams-to-promise – marekful

答えて

0

約束のためにコンバージョンストリームを使用し、Promise.allを使用することができます。

この例では、ストリームに変換を約束するためにstream-to-promiseライブラリを使用しました。

各ストリームについて、約束が作成されます。この約束は、ストリームが完了すると解決され、ストリームが失敗すると拒否されます。

 
const streamToPromise = require('stream-to-promise') 

const promise1 = streamToPromise(readable1.pipe(writable1)); 
const promise2 = streamToPromise(readable2.pipe(writable2)); 

Promise.all([promise1, promise2]). 
    .then(() => console.log('all the streams are finished')); 
関連する問題