为什么在重放()之前调用publish()很重要

时间:2017-09-01 23:48:56

标签: rx-java reactive-programming rx-android rx-java2

我读过很多关于publish()和replay()的rx例子。在所有教程中,他们都说在调用replay()之前调用publish()很重要。为什么会这样?如果你调用replay()并且从不调用publish()会发生什么?似乎replay()运算符会订阅源observable并开始缓存。然后任何人都会获得相同的完整数据流。我可以看到publish()改变游戏的唯一原因是它会延迟订阅源observable,直到调用connect()。这是对的吗?

1 个答案:

答案 0 :(得分:5)

您通常会同时应用其中一个,但不能同时应用两个,因为publish().replay()与普通replay()没有实际区别,replay().publish()只是后期消费者的一个秘诀。看不到整个序列。

  

在所有教程中,他们都说在调用replay()之前调用publish()非常重要。

这绝对是错的,你在哪里读到的?

  

这是对的吗?

两个运算符都返回ConnectableObservable,您必须在两种情况下都调用connect来启动序列。在这两种情况下,您应该在致电连接之前准备好消费者,或者使用autoConnect(n)n消费者之后启动序列。

publishreplay之间的差异,后者缓存部分或全部项目,无论何时订阅,都会将其重播给消费者。前者不保留任何项目,甚至不保留最新的项目BehaviorSubject,并将该项目发送给在该确切时间订阅它的消费者。