Wciąż jestem reaktywnym początkującym i szukam pomocy.Łącząc dwa możliwe do zaobserwowania <Void> s
func doA() -> Observable<Void>
func doB() -> Observable<Void>
enum Result {
case Success
case BFailed
}
func doIt() -> Observable<Result> {
// start both doA and doB.
// If both complete then emit .Success and complete
// If doA completes, but doB errors emit .BFailed and complete
// If both error then error
}
Powyższy to co myślę, że chcę ... Początkowe funkcje doA()
i doB()
sieć okład wzywa więc będą zarówno emitować jeden sygnał, a następnie Complete
(lub Error
bez emisji jakichkolwiek Next
zdarzenia). Jeśli doA()
dopełnia ale błędy doB()
, chcę doIt()
emitować .BFailed
, a następnie zakończyć.
Czuję, że powinienem używać zip
lub combineLatest
, ale nie jestem pewien, jak się dowiedzieć, która sekwencja się nie powiodła, jeśli to zrobię. Jestem też całkiem pewien, że catchError
jest częścią rozwiązania, ale nie jestem pewien, gdzie dokładnie to umieścić.
-
Jak myślę o tym, że jestem w porządku z rozmowy dzieje sekwencyjnie. To może być nawet lepiej ...
IE:
Start doA()
if it completes start doB()
if it completes emit .Success
else emit .BFailed.
else forward the error.
Dzięki za wszelką pomoc.
Hmm ... Dzięki za odpowiedź, ale RxSwift nie ma metody materializacji. Przynajmniej jeszcze nie. –