【发布时间】:2019-09-20 14:34:34
【问题描述】:
是否有缓存最后发出的项目并将其传递给每个新订阅者的操作员?换句话说,一个使 observable 表现得像 BehaviorSubject?
【问题讨论】:
标签: rx-java
是否有缓存最后发出的项目并将其传递给每个新订阅者的操作员?换句话说,一个使 observable 表现得像 BehaviorSubject?
【问题讨论】:
标签: rx-java
是的。但在名为 ReplayingShare 的第 3 方库中。链接在这里: https://github.com/JakeWharton/RxReplayingShare
对比.replay(1).autoConnect() 如果下游没有订阅者,它可以与上游断开连接。
对比.replay(1).refCount()它也可以缓存最后一个值,即使你已经与它断开连接。
此外,如果上游结束(无论您使用哪个refCount/autoConnect),您将无法获得下一个订阅者的重播。但是使用 ReplayingShare,您将始终获得最后一个项目缓存。
【讨论】:
是的,您可以使用 replay(bufferSize) 运算符,参数为 1,来自 docs:
返回一个 ConnectableObservable,它共享对源 Observable 的单个订阅,最多重放该 Observable 发出的 bufferSize 项
replay 将缓存最后一个项目,并将其重播给任何新订阅者,请注意它是 ConnectableObservable,因此您必须调用 connect() 使其开始发射项目,或使用 refCount() 获取 Observable使用第一个Subscriber 自动执行,并在最后一个订阅取消订阅时取消订阅。
【讨论】: