首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >stream.Duplex的问题超类

stream.Duplex的问题超类
EN

Stack Overflow用户
提问于 2017-04-04 00:49:07
回答 1查看 33关注 0票数 0

我试图通过扩展stream.Readable来实现一个可读的流。

根据文档,我所要做的就是实现_read()。

我不明白的是,在_read中我没有数据时该做什么,或者当我再次拥有数据时如何触发对_read的另一次调用。我不认为有一个概念是可读的,以应付缓慢或延迟交付的数据。我可以看到,_read()是在调用管道()函数之后被调用的。

如果在_read中的任何一点上,我都没有数据,我必须返回而不传递,而且似乎再也没有调用_read。一旦数据准备就绪,我试图发出一个可读的事件,但这不会触发对_read的调用。

这个问题不仅在开始时发生,而且可能在我的源代码花费时间交付时发生。stream.Readable不支持慢源吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-04 00:58:39

_read()只是一个信号,它让您知道可以/应该从上游源读取更多的数据。当您将数据push()到流并且push()返回false时,这是最重要的。当发生这种情况时,在再次调用_read()之前,您不应该再推送任何数据。

实际上,没有什么可以阻止您在任何时候推送任何数量的数据,但是如果不检查push()的返回值并对其进行相应的操作,那么您可能会在内存中缓冲太多数据。

此外,在继承/子类Readable时,您需要确保在您自己的构造函数中(用于预ES6类/原型继承)的流实例(this)上下文中调用超类构造函数(用于ES6类)或Readable构造函数(例如,Readable.call(this, { /*Optional Readable settings*/ }) )。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43196569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档