我一直在尝试创建一个双工流来接收许多对象,重新组织它们,然后将它们通过管道传输到从我的流中读取的任何流。痛点是读取部分只能在接收到所有对象之后(换句话说,在完成事件之后)才开始。
我怎样才能做到这一点?
我目前的想法是,我有两个不同的流(而不是双工),并且我只需在 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/