我读过很多关于publish()和replay()的rx例子。在所有教程中,他们都说在调用replay()之前调用publish()很重要。为什么会这样?如果你调用replay()并且从不调用publish()会发生什么?似乎replay()运算符会订阅源observable并开始缓存。然后任何人都会获得相同的完整数据流。我可以看到publish()改变游戏的唯一原因是它会延迟订阅源observable,直到调用connect()。这是对的吗?
答案 0 :(得分:5)
您通常会同时应用其中一个,但不能同时应用两个,因为publish().replay()
与普通replay()
没有实际区别,replay().publish()
只是后期消费者的一个秘诀。看不到整个序列。
在所有教程中,他们都说在调用replay()之前调用publish()非常重要。
这绝对是错的,你在哪里读到的?
这是对的吗?
两个运算符都返回ConnectableObservable
,您必须在两种情况下都调用connect
来启动序列。在这两种情况下,您应该在致电连接之前准备好消费者,或者使用autoConnect(n)
在n
消费者之后启动序列。
publish
和replay
之间的差异,后者缓存部分或全部项目,无论何时订阅,都会将其重播给消费者。前者不保留任何项目,甚至不保留最新的项目BehaviorSubject
,并将该项目发送给在该确切时间订阅它的消费者。