为什么在 replay() 之前调用 publish() 很重要
Why is it important to call publish() before replay()
我读过很多关于 publish() 和 replay() 的 rx 示例。在所有教程中,他们都说在调用 replay() 之前调用 publish() 很重要。为什么会这样?如果你调用 replay() 而从不调用 publish() 会发生什么?似乎 replay() 运算符会订阅源可观察对象并开始缓存。然后任何人都会得到相同的、完整的数据流。我可以看到 publish() 改变游戏规则的唯一原因是它会延迟对源可观察对象的订阅,直到 connect() 被调用。这样对吗?
你通常应用其中一个,但不能同时应用两个,因为 publish().replay()
与普通的 replay()
没有实际区别,而 replay().publish()
只是一个迟到的配方消费者看不到整个序列。
In all tutorials, they say it's important to call publish() before calling replay().
这绝对是错误的,你到底从哪里读到的?
Is this right?
两个运算符 return 和 ConnectableObservable
并且在这两种情况下您都必须调用 connect
才能启动序列。在这两种情况下,您都应该在调用 connect 之前准备消费者,或者使用 autoConnect(n)
在 n
消费者之后启动序列。
publish
和replay
的区别在于,后者会缓存部分或全部项目,并在消费者订阅时将其重放给消费者。前者不保留任何项目,甚至不保留像 BehaviorSubject
这样的最新项目,并将该项目发送给当时订阅它的消费者。
我读过很多关于 publish() 和 replay() 的 rx 示例。在所有教程中,他们都说在调用 replay() 之前调用 publish() 很重要。为什么会这样?如果你调用 replay() 而从不调用 publish() 会发生什么?似乎 replay() 运算符会订阅源可观察对象并开始缓存。然后任何人都会得到相同的、完整的数据流。我可以看到 publish() 改变游戏规则的唯一原因是它会延迟对源可观察对象的订阅,直到 connect() 被调用。这样对吗?
你通常应用其中一个,但不能同时应用两个,因为 publish().replay()
与普通的 replay()
没有实际区别,而 replay().publish()
只是一个迟到的配方消费者看不到整个序列。
In all tutorials, they say it's important to call publish() before calling replay().
这绝对是错误的,你到底从哪里读到的?
Is this right?
两个运算符 return 和 ConnectableObservable
并且在这两种情况下您都必须调用 connect
才能启动序列。在这两种情况下,您都应该在调用 connect 之前准备消费者,或者使用 autoConnect(n)
在 n
消费者之后启动序列。
publish
和replay
的区别在于,后者会缓存部分或全部项目,并在消费者订阅时将其重放给消费者。前者不保留任何项目,甚至不保留像 BehaviorSubject
这样的最新项目,并将该项目发送给当时订阅它的消费者。