Я все еще реактивный новичок, и я ищу помощи.
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
}
Вышеупомянутое - это то, что я думаю, что хочу... Начальные функции doA()
и doB()
оборачивают сетевые вызовы, поэтому они обе будут генерировать один сигнал, а затем Complete
(или Error
без генерации каких-либо событий Next
). Если doA()
завершается, но doB()
ошибок, я хочу doIt()
чтобы испустить .BFailed
, а затем завершить.
Такое ощущение, что я должен использовать zip
или combineLatest
, но я не уверен, как узнать, какая последовательность не удалась, если я это сделаю. Я также почти уверен, что catchError
является частью решения, но я не уверен, куда именно его поместить.
--
Пока я думаю об этом, я согласен с тем, что вызовы происходят последовательно. Может быть, это даже лучше...
IE:
Start doA()
if it completes start doB()
if it completes emit .Success
else emit .BFailed.
else forward the error.
Спасибо за любую помощь.