尝试迁移到rx-java2时遇到了一个问题,即在它自己的flatMap中重新订阅可观察到的共享内容。需要此模式才能获得更新-刷新链:
整件事看起来是这样的:
@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事件时出现的。
有没有人知道这是一种精心设计的行为,并以某种方式记录在案?当然有一个解决办法,但我需要知道原因,因为这有点烦人。这种方法在Rx1.x中有效。
目前正在使用2.1.3版本
编辑:
似乎没有合法的方式“重启”共享的可观察到的和它的副作用,因为没有保证其他用户目前没有收听。
发布于 2017-09-06 15:14:01
看一下“共享”的气泡图,你就会明白为什么它的行为是这样的:Observable.share()。
share()发出订阅后发出的项,它不会重新发出先前发出的项。看看Observable.replay()的行为,这应该是您所期望的。
发布于 2017-09-07 06:38:00
似乎没有合法的方式“重启”共享的可观察到的和它的副作用,因为没有保证其他用户目前没有收听。
https://stackoverflow.com/questions/46077539
复制相似问题