如何从两个请求中使用RxSwift捕获错误

问题描述:

我很新,我想知道如何从一个地方压缩请求(请参见上面的剪切)中捕获错误。在目前的实现中,我在两个地方都有错误处理,但我的目标是将它放在一个地方。我的请求被压缩,因为如果这个请求中的一个失败,整个序列将失败,所以结果我希望在两个请求的代码中都有一个错误处理位置。如何从两个请求中使用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) 

..可能与一些处理常见错误的示例代码链接对我来说很好。 非常感谢。

zip返回一个新的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 documentation了解详情。

+0

好的提示,谢谢! – Robert