0
私は最近、約束をもたらすジェネレータを実行するためにQ.spawn
関数を使用し始めました。これは、ストリームのサポートがまだ開始されていないブラウザーではうまくいきますが、ノードの場合はストリームがあります。ジェネレータ関数内でストリームを使用していて、ライターストリームが完了すると、コードがきれいになることはありません。ジェネレータ関数でストリームを生成する
Q.spawn(function*() {
yield new Promise(resolve => {
let fromStream = fs.createReadStream('x.txt');
let toStream = fs.createWriteStream('y.txt');
toStream.on('end',() => resolve());
fromStream.pipe(toStream);
});
});
これはうまくいきますが、多くのストリームを処理し始めると、コードは実際には醜いものになります。スニペットのように簡単にできますか?
someGeneratorFuncRunner(function*() {
yield fs.createReadStream('x.txt')
.pipe(fs.createWriteStream('y.txt'));
});
わかりました、しかし、私が本当に知りたいのは、ストリームを生成することも可能であるかどうかで、ランナーはその後、暗黙的にpromiにストリームを変換し、 se。私が直面している問題は 'someStream.pipe(outStream).on( 'end'、=> resolve())'は約束を解決していないようです。私はnodejsストリームが初めてです。 – Ajinkya
BluebirdのようにQが拡張可能だとは思わない。 stream.prototype'を 'then'メソッドで拡張してストリームを作成可能にすることができます。これは' yield'されるはずですが、それが良い方法かどうかは分かりません。 – Bergi