我一直在尝试创建一个接收大量对象的双工流,重新组织它们,然后将它们传输到从我的流中读取的任何流。痛点是阅读部分应该只在收到所有对象后开始(换句话说,在完成事件之后)。
我该怎么做?
我目前的想法是,我有两个不同的流(而不是双工),并且我只是在我的API上明确说明之前不应该使用可读流Writable流告诉你这样做 - 但这似乎错了!
那么,拜托,有没有更好的方法呢? 提前谢谢。
答案 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子类中。