2017-01-20 8 views
1

私はいくつかのオブジェクトを受け取って再編成し、ストリームからストリームを読み込んでいるものにパイプするDuplex Streamを作成しようとしていました。痛みは、すべてのオブジェクトが受信された後(つまり、終了イベントの後)にのみ読み込み部分が開始されることです。データの送信を開始するまで、デュプレックスストリームを待機させる方法はありますか?

どうすればいいですか?

私の現在のアイデアは、(Duplexの代わりに)2つの異なるストリームを持っていて、Writableストリームがあなたに知らせる前に、Readableストリームを使用してはならないことをAPIで明確にしたいということですそうすること - しかしそれは間違っているようです!

だから、もっと良い方法がありますか? ありがとうございます。

答えて

0

答えを見つけました! 応答する準備が整うまで、this.push()に電話をかけずに待機するように消費者ストリームに指示するようです。 フラグを設定して、コンシューマがデータを待っていることをデュプレックスストリームに知らせるだけでした。このフラグをチェックするには、on('end')イベントをソースで使用し、フラグがtrueの場合はthis._readを呼び出します。コードは次のとおりです。

constructor(source, options){ 
    super(options); 

    this._isReady = false; 
    source.on('end'() => { 
    this._isReady = true; 
    if(this._isOnHold) this._read(); 
    }) 
} 

_read(){ 
    if(!this._isReady) { 
    this._isOnHold = true; 
    } 

    // regular push sub-routine 
} 

もちろん、これはすべてDuplex Streamサブクラスの内部にあります。

関連する問題