代码之家  ›  专栏  ›  技术社区  ›  Alexey Subbota

可观察的.switchMap不中断可观察的

  •  0
  • Alexey Subbota  · 技术社区  · 6 年前

    我不明白为什么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())
    

    我想做的事。

    0 回复  |  直到 6 年前