Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么RxJava observate.doOnDispose会触发两次?_Java_Kotlin_Observable_Rx Java - Fatal编程技术网

为什么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'