/ / RxJava 2 - a następnie przy pomocy Completable from Future? - java, rx-java, rx-java2

RxJava 2 - a następnie przy pomocy Completable from Future? - java, rx-java, rx-java2

Mam dwa obiekty, które muszę wywoływać jeden po drugim. Mam ten kod:

public Completable getMyCompletable() {
return getFirstCompletable().andThen(getSecondCompletable());
}

public Completable getFirstCompletable() {
return Completable.fromFuture(getFirstFuture());
}

public Completable getSecondCompletable() {
return Completable.fromFuture(getSecondFuture());
}

Druga Przyszłość zależy od ukończenia pierwszej Przyszłości, w przeciwnym razie zakończy się niepowodzeniem. Problem (myślę) jest taki, że kiedy dzwonię getSecondCompletable() i przekazać wynik do andThen(), druga Przyszłość jest tworzona i zaczyna biec,pomimo, że drugi Completable nie został zapisany, a pierwszy Future nie został ukończony. Powoduje to awarię drugiej operacji Future, podczas gdy pierwsza operacja Future wkrótce się powiedzie.

Przenoszę ten kod z RxJava 1 na RxJava 2. Pierwotnie kod używał FlatMap do uruchomienia dwóch Single<Void> operacje następujące po sobie. Ponieważ używał FlatMap, druga Przyszłość nie została stworzona, dopóki nie skończy się pierwsza. Jak uzyskać to zachowanie w RxJava 2?

Odpowiedzi:

2 dla odpowiedzi № 1

Możesz użyć tego samego wzorca z RxJava 1.x, ale także odroczyć tworzenie drugiej przyszłości:

public Completable getSecondCompletable() {
return Completable.defer(() -> Completable.fromFuture(getSecondFuture()));
}