我有以下的 RxJava2 Kotlin 代码:
val tester = Completable.complete()
.andThen(SingleSource<Int> { Single.just(42) })
.test()
tester.assertComplete()
tester.assertValue(42)
这里模拟了一个Completable observable(想象一下对API的简单更新操作)和一个Single observable(想象一下对API的获取操作)。我想以某种方式连接这两个可观察对象,使得当Completable完成后,Single运行,最终我能在我的观察者上获得onSuccess事件(Int 42)。
然而,这个测试代码没有起作用。断言失败,出现以下错误:
java.lang.AssertionError: Not completed
(latch = 1, values = 0, errors = 0, completions = 0))
我无法理解我的错误之处,我期望Completable在订阅后会发出onComplete,然后Single会订阅,我的观察者(tester
)将获得一个值为42的onSuccess事件,但似乎订阅保持“暂停”而不发出任何内容。
这个想法类似于这篇博客文章中找到的想法:https://android.jlelse.eu/making-your-rxjava-intentions-clearer-with-single-and-completable-f064d98d53a8
apiClient.updateMyData(myUpdatedData) // a Completable
.andThen(performOtherOperation()) // a Single<OtherResult>
.subscribe(otherResult -> {
// handle otherResult
}, throwable -> {
// handle error
});
.andThen { Single.just(42) }
,但它无法编译,因此我将其添加到了代码中。 - Miguel Beltran