如何使用 RxSwift 在一个地方捕获来自两个请求的错误
Posted
技术标签:
【中文标题】如何使用 RxSwift 在一个地方捕获来自两个请求的错误【英文标题】:How to catch errors from two requests in one place using RxSwift 【发布时间】:2016-03-08 19:08:33 【问题描述】:我很新,我想知道如何从一个地方压缩(见上面的片段)的请求中捕获错误。在当前的实现中,我在两个地方进行了错误处理,但我的目标是将它放在一个地方。我的请求已压缩,因为如果此请求之一失败,整个序列将失败,因此我希望在两个请求的代码中都有一个错误处理位置。
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)
..也许与示例代码的一些链接在常见的地方处理错误对我来说会很棒。 非常感谢。
【问题讨论】:
【参考方案1】: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。
【讨论】:
以上是关于如何使用 RxSwift 在一个地方捕获来自两个请求的错误的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 RxSwift 和 alamofire 获得嵌套 api 调用的响应?
如何使用 RxSwift 和 Alamofire 库调用来自另一个 API 的响应的 API?