如何让双工流等待直到完成事件开始发送数据?

时间:2017-01-20 14:57:43

标签: javascript node.js stream

我一直在尝试创建一个接收大量对象的双工流,重新组织它们,然后将它们传输到从我的流中读取的任何流。痛点是阅读部分应该只在收到所有对象后开始(换句话说,在完成事件之后)。

我该怎么做?

我目前的想法是,我有两个不同的流(而不是双工),并且我只是在我的API上明确说明之前不应该使用可读流Writable流告诉你这样做 - 但这似乎错了!

那么,拜托,有没有更好的方法呢? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

找到答案! 看起来你可以告诉消费者流等待,直到你准备好回复为止,不要再调用this.push()。 我所要做的就是设置一个标志,让双工流知道消费者正在等待数据,然后使用源上的on('end')事件来检查这个标志,如果标志就调用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子类中。