如何使用 RxSwift 在一个地方捕获来自两个请求的错误

How to catch errors from two requests in one place using RxSwift

我是新手,我想知道如何从压缩(见上面的片段)在一个地方的请求中捕获错误。在当前的实现中,我在两个地方进行了错误处理,但我的目标是将它放在一个地方。我的请求被压缩了,因为如果其中一个请求失败,整个序列都会失败,所以结果我想在代码中为两个请求放置一个错误处理位置。

 let firstReq =  self.sendReq() // returns  Observable<Bool>
        .catchError {
            error in
            return self.just(true)
    }

    let secondReq =  self.sendReqTwo() // returns  Observable<Bool>
        .catchError {
            error in
            return self.just(true)
    }


    goBttnOutlet.rx_tap
        .subscribeNext {
          Observable.zip(firstReqRes, secondReqRes) { (firstRes, secondRes) -> Bool in
                return firstRes && secondRes
            }.subscribeNext { summaryRes in
                print(" \(summaryRes)")
            }.addDisposableTo(self.rx_disposableBag)
        }.addDisposableTo(rx_disposableBag)

..也许一些 link 带有在常见地方处理错误的示例代码对我来说会很好。 非常感谢。

zip returns 一个新的 Observable<T>,因此您可以简单地将 catchError 操作员应用程序移动到 zip returns.

let firstReq =  self.sendReq()
let secondReq =  self.sendReqTwo()
let zippedReq = Observable.zip(firstReq, secondReq)
    .catchErrorJustReturn { _ in true }

goBttnOutlet.rx_tap
    .subscribeNext {
      zippedReq.subscribeNext { summaryRes in
            print(" \(summaryRes)")
        }.addDisposableTo(self.rx_disposableBag)
    }.addDisposableTo(rx_disposableBag)

附带说明一下,您可以将 goBttnOutlet 之后的链改进为以下内容

goBttnOutlet.rx_tap.flatMap { zippedReq }
    .subscribeNext { summaryRes in
        print(" \(summaryRes)")
    }.addDisposableTo(rx_disposableBag)

详情见flatMap documentation