尝试迁移到rx-java2
并遇到了重新订阅其自身flatMap
内的共享observable的问题。需要此模式来获取更新刷新链:
整件事看起来像这样:
@Test fun sharedTest() {
val o = Observable.just(1).share()
assertEquals(1, o
.take(1)
.flatMap({
Completable.complete()
.andThen(o) })
.blockingFirst())
}
测试失败:java.util.NoSuchElementException
如果不共享o
,一切正常。
这种行为似乎是因为后一个订阅者在已经调度了单个原始值并且只能看到onComplete
事件时出现。
有人知道这是一种设计行为并以某种方式记录吗?当然有一种解决方法,但我需要知道原因,因为这有点烦人。该方法适用于Rx 1.x
目前使用的是2.1.3版本
似乎没有合法的方式来“重启”共享的观察及其副作用,因为目前无法保证其他订阅者不会收听。
答案 0 :(得分:0)
查看分享'的气泡图。并且你会明白为什么它会像那样:Observable.share()
。
share()会发出订阅后发出的项目,它不会重新发出以前发出的项目。看看Observable.replay()
的行为应该是您期望的行为。
答案 1 :(得分:0)
似乎没有合法的方法可以“重新启动”共享的observable及其副作用,因为目前无法保证其他订阅者不会收听。