我试图通过扩展stream.Readable来实现一个可读的流。
根据文档,我所要做的就是实现_read()。
我不明白的是,在_read中我没有数据时该做什么,或者当我再次拥有数据时如何触发对_read的另一次调用。我不认为有一个概念是可读的,以应付缓慢或延迟交付的数据。我可以看到,_read()是在调用管道()函数之后被调用的。
如果在_read中的任何一点上,我都没有数据,我必须返回而不传递,而且似乎再也没有调用_read。一旦数据准备就绪,我试图发出一个可读的事件,但这不会触发对_read的调用。
这个问题不仅在开始时发生,而且可能在我的源代码花费时间交付时发生。stream.Readable不支持慢源吗?
发布于 2017-04-04 00:58:39
_read()只是一个信号,它让您知道可以/应该从上游源读取更多的数据。当您将数据push()到流并且push()返回false时,这是最重要的。当发生这种情况时,在再次调用_read()之前,您不应该再推送任何数据。
实际上,没有什么可以阻止您在任何时候推送任何数量的数据,但是如果不检查push()的返回值并对其进行相应的操作,那么您可能会在内存中缓冲太多数据。
此外,在继承/子类Readable时,您需要确保在您自己的构造函数中(用于预ES6类/原型继承)的流实例(this)上下文中调用超类构造函数(用于ES6类)或Readable构造函数(例如,Readable.call(this, { /*Optional Readable settings*/ }) )。
https://stackoverflow.com/questions/43196569
复制相似问题