Observable.switchMap不会中断Observable

时间:2019-01-10 19:05:06

标签: rx-java2

我不明白为什么switchMap无法正常工作。 在第一种情况下,switchMap不会中断Observable,但在第二种情况下,它将按预期工作。请解释一下这种行为。

    val test = TestObserver<Int>()

    Observable.fromArray(10, 20)
        .switchMap({
            // 1. switchMap does not interrupt generator
            Observable.generate(
                Callable{
                    generateSequence(it, { n -> if (n < it + 9) n + 1 else null}).iterator()
                },
                BiConsumer<Iterator<Int>, Emitter<Int>>(){ data, emitter ->
                    if (data.hasNext()) {
                        Thread.sleep(100)
                        emitter.onNext(data.next())
                    }else {
                        emitter.onComplete()
                    }
                }
            )
            // 2. switchMap disposes observable
            //Observable.just(it).delay(1, TimeUnit.SECONDS)
        },2)
        .subscribeWith(test)
    test.await()
    // 1. >> [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
    // But I expect [20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
    // 2. >> [20]
    print(test.values())

我想做什么。

实际上,我的生成器根据switchMap的值来进行艰苦的工作,如果出现新的值,我想中断这项工作。在生成器开始时开始事务,在生成器结束时提交或取消事务。

0 个答案:

没有答案