javascript - 如何让双工流等到完成事件才开始发送数据?

标签 javascript node.js stream

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

我怎样才能做到这一点?

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

请问,有更好的方法吗? 提前致谢。

最佳答案

找到答案了! 似乎您可以通过在准备好响应之前不调用 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 子类中。

关于javascript - 如何让双工流等到完成事件才开始发送数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41766494/

相关文章:

javascript - 如何在javascript中基于相同的键和值合并两个对象数组?

javascript - 事件驱动和并发问题?

javascript - Node.js:如何在写入流 'finish' 事件上写入()

javascript - 在表格中使用 bootstrap collapse 和 div 时如何避免缓慢折叠

javascript - 使用 AngularJS 单击时清除文本输入

javascript - jQuery 没有看到 click() 事件

javascript - 在 node.js selenium-webdriver 中打开一个新选项卡

node.js - angular2 教程 - 模板不显示在 Node 应用程序中

node.js - NodeJS 从 https 流写入二进制文件

.net - .NET Streams 是否节省内存?