0

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

 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)

..也许与示例代码的一些链接在常见的地方处理错误对我来说很棒。非常感谢。

4

1 回答 1

1

zip返回一个 new Observable<T>,因此您可以简单地将catchError操作员应用程序移至zip返回的内容。

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 文档

于 2016-03-09T07:24:08.423 回答