如何从两个请求中使用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了解详情。
好的提示,谢谢! – Robert