如何链接 Observables 并为错误处理创建一个公共位置

How to chain Observables and create one common place for error handling

我想知道如何以更优雅的方式编写我的代码...我有两个请求,第二个请求必须等待第一个请求。如果第一个失败,整个句子应该失败,我想知道如何在一个常见的地方捕获错误?

    enum TestError: ErrorType {
        case Connection
    }

    private func runTest() {
        rx_firstReq()
            .subscribeNext() { _ in
                return self.rx_secondReq()
                    .subscribeNext() { _ in
                        print("whole req sequence finished with success!")
                }.addDisposableTo(self.myDisposeBag)
        }.addDisposableTo(myDisposeBag)
    }

    func rx_firstReq() -> Observable<Bool> {
        return Observable.create() { observable -> Disposable in
            observable.onError(TestError.Connection) // We are assuming that first req gets failed
            observable.onCompleted()

            return NopDisposable.instance
        }
    }

    func rx_secondReq() -> Observable<Bool> {
        return Observable.create() { observable -> Disposable in
            observable.onNext(true)
            observable.onCompleted()

            return NopDisposable.instance
        }
    }

如您所见,没有任何地方可以进行错误处理...我不知道如何对其建模,此时我链中的每个下一个请求都会创建下一个缩进级别...在我看来是没有很好地使用 RxSwift...

..一些提示或 link 示例代码在常见的地方处理错误对我来说很棒。

切勿在另一个 subscribe 中使用一个 subscribe! :)
对于您的问题,flatMap 是解决方案。

rx_firstReq()
   .flatMap { _ -> Observable<Bool> in
      rx_secondReq()
   }
   .subscribe(next, error ...)
   .disposed(by: bag)

瞧 :)