Node.js 如何在数据实际上已准备好进行流式处理时获得通知?

Node.js 如何在数据实际上已准备好进行流式处理时获得通知?,node.js,stream,node-streams,Node.js,Stream,Node Streams,我有两条溪流: 源流,从Internet下载音频文件 消费者流,将文件流式传输到流式服务器 在流式传输到服务器之前,应该有一个返回句柄的握手。然后我有几秒钟的时间真正开始流媒体,或者服务器关闭连接 也就是说,我应该 首先等待源数据准备好进行流式传输 然后才开始流媒体 问题在于,似乎没有一种方法可以在源流中的数据准备就绪时获得通知 首先想到的事件是“数据”事件。但它也会消耗不可接受的数据,并且根本不允许使用管道 那么如何做到这一点: wait pEvent(sourceStream,'da

我有两条溪流:

  • 源流,从Internet下载音频文件
  • 消费者流,将文件流式传输到流式服务器
在流式传输到服务器之前,应该有一个返回句柄的握手。然后我有几秒钟的时间真正开始流媒体,或者服务器关闭连接

也就是说,我应该

  • 首先等待源数据准备好进行流式传输
  • 然后才开始流媒体
问题在于,似乎没有一种方法可以在源流中的数据准备就绪时获得通知

首先想到的事件是“数据”事件。但它也会消耗不可接受的数据,并且根本不允许使用管道

那么如何做到这一点:

wait pEvent(sourceStream,'dataIsReady');
//与服务器协商传输事宜
管道(consumerStream);
提前谢谢。

回答我自己的问题

这里有一个适合我的解决方案

它需要一个带有自定义事件的辅助直通流:

类DataWaitPassThroughStream扩展了转换{
dataIsReady:boolean=false;
构造函数(选项:TransformOptions){
超级(opts);
}
_转换(块:任意,编码:BufferEncoding,回调:TransformCallback){
如果(!this.dataIsReady){
this.dataIsReady=true;
这个.emit('dataIsReady');
}
回调(null,chunk);
}
}
用法

从“p-event”导入事件;
const dataReadyStream=sourceStream.pipe(新的DataWaitPassThroughStream());
等待事件(dataReadyStream,'dataIsReady');
//与服务器协商传输事宜。。。
dataReadyStream.pipe(consumerStream);

可读事件如何处理?是的,我也一直在玩它。但是我试着在源流上听那个不起作用的事件。请看下面我自己的答案。是的,这有点道理,因为源流数据只能消耗一次。啊。。。。没有。事实上我错了,前面的“可读”解决方案没有真正起作用:(。我重写了下面的答案。请看一看。