为什么RxJava observate.doOnDispose会触发两次?
此代码为什么RxJava observate.doOnDispose会触发两次?,java,kotlin,observable,rx-java,Java,Kotlin,Observable,Rx Java,此代码 @RunWith(JUnit4::class) class Playground { @Test fun test() { val subject1 = BehaviorSubject.create<Int>() val subject2 = BehaviorSubject.create<Int>() val observable = subject1.doOnDispose { println("
@RunWith(JUnit4::class)
class Playground {
@Test
fun test() {
val subject1 = BehaviorSubject.create<Int>()
val subject2 = BehaviorSubject.create<Int>()
val observable = subject1.doOnDispose { println("subject1 observable disposed") }
val disposable = Observable.combineLatest(
observable.takeUntil { it < 1 },
subject2.doOnDispose { println("subject2 observable disposed") },
BiFunction { t1: Int, t2: Int ->
println("$t1 $t2")
})
.subscribe()
subject1.onNext(1)
subject2.onNext(0)
subject1.onNext(0)
Thread.sleep(100)
disposable.dispose()
}
}
这是错误的,因为奇怪的是,可观测数据可以被处理两次。有人能解释一下为什么会这样吗
implementation("io.reactivex.rxjava2:rxjava:2.2.2")
既然它对OP有用,我想让它为未来的读者解答也没什么坏处。将RxJava版本升级到2.2.6基本上解决了以下问题:
implementation 'io.reactivex.rxjava2:rxjava:2.2.6'
任何对这种行为背后的问题感兴趣的人都可以在这里查看RxJava 2.2.2中的问题公关我刚刚运行了您的代码,它只启动了一次。您是在尝试运行此代码段,还是涉及到其他逻辑。如果是,请将您的问题扩大一点,有时问题隐藏在实现中。但无论如何,它不应该一次发射两次。@Farid我编辑了问题代码以使其更明显,但是的,它是唯一的代码。可能是由于并发性,所以我对代码做了一些更改。好的,发现了问题,将RxJava版本更改为
implementation“io.reactivex.rxjava2:RxJava:2.2.6”
,解决了问题。检查它是否适合你?显然,这是在版本2.2.2的问题列表中,你可以在这里看到PR@Farid you right,也许把它作为答案发布?很好,至少,我们做对了)。是的,把它添加为asnwer没有问题
implementation 'io.reactivex.rxjava2:rxjava:2.2.6'