Mam następujący kod RxJava2 Kotlin:RxJava Completabe andthen testowanie
val tester = Completable.complete()
.andThen(SingleSource<Int> { Single.just(42) })
.test()
tester.assertComplete()
tester.assertValue(42)
Symuluje mający Completable obserwowalne (wyobrazić sobie prostą obsługę aktualizacji do API), a następnie pojedyncze obserwowalne (obraz operacji get na zasadzie API). Chcę połączyć obydwa obserwowalne w taki sposób, że gdy kończy się Completable, Single działa, a na końcu dostaję zdarzenie onSukces na moim obserwatorze (Int 42).
Jednak ten kod testowy nie działa. Twierdzenie nie powiedzie się z powodu następującego błędu:
java.lang.AssertionError: Not completed
(latch = 1, values = 0, errors = 0, completions = 0))
ja nie jestem w stanie zrozumieć, co robię źle, spodziewam się, że Completable emituje onComplete na abonament, a potem panna subskrybuje, a mój obserwator (tester
) dostaje zdarzenie onSuccess o wartości 42, ale wydaje się, że subskrypcja pozostaje "zawieszona", nie emitując niczego.
Pomysł jest podobny do tego znalezionego w tym blogu: 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
});
Dzięki akarnokd jakiegoś powodu dodałem, że do kodu, ponieważ początkowo robiłem '.andThen {Single.just (42) } 'który nie kompilował. – Miquel