Как ловить ошибки из двух запросов в одном месте с помощью 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)

..может быть, какая-нибудь ссылка с примером кода с обработкой ошибки в обычном месте будет мне полезна. Большое спасибо.


person Robert    schedule 08.03.2016    source источник


Ответы (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.

person tomahh    schedule 09.03.2016