结合两个Observable <Void> s

Dan*_* T. 5 reactive-programming swift rx-swift

我仍然是一个反应新手,我正在寻求帮助.

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

}
Run Code Online (Sandbox Code Playgroud)

以上是我认为我想要的...初始函数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.
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

Dan*_* T. 0

我已经学好了 RxSwift 现在可以回答这个问题了......

func doIt() -> Observable<Result> {
    Observable.zip(
        doA().map { Result.Success },
        doB().map { Result.Success }
            .catch { _ in Observable.just(Result.BFailed) }
    ) { $1 }
}
Run Code Online (Sandbox Code Playgroud)