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 № 1Moż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()));
}