Swift 如何使用先前可观察链的结果?

Swift 如何使用先前可观察链的结果?,swift,rx-swift,reactive,Swift,Rx Swift,Reactive,在一些平面图链之后,我希望最终使用所有之前的结果,假设我有以下代码: func getObservable1() -> Observable<API1Response> { ... } func getObservable2(param: API1Response) -> Observable<API2Response> { ... } func getObservable3(param: API2Response) -> Obs

在一些平面图链之后,我希望最终使用所有之前的结果,假设我有以下代码:

func getObservable1() -> Observable<API1Response> {

    ...
}

func getObservable2(param: API1Response) -> Observable<API2Response> {

    ...
}

func getObservable3(param: API2Response) -> Observable<API3Response> {

    ...
}

getObservable1()
    .flatMap { api1Response in
        return getObservable2(api1Response) 
    }
    .flatMap { api2Response in
        return getObservable3(api2Response) 
    }
    .subscribe(onNext: { api3Response  in
        // I want to use both of api1Response and api2Response here
    })

您需要按照先决条件的顺序进行响应,还是只需要成功完成所有响应

如果您需要等待请求#1和请求#2的完成,那么您可以使用

Observable.combineLatest(requestObservable1, requestObservable2)
  .flatMap { (requestResult1, requestResult2) -> Observable<You-Data-Type> in
     // Use result from request #1 & #2
     return requestObserver3
  }.subscribe(onNext: { (resultRequest3) in
  })
  ...
Observable.CombineTest(requestObservable1,requestObservable2)
.flatMap{(requestResult1,requestResult2)->在
//使用请求#1和#2的结果
返回请求观察服务器3
}.subscribe(onNext:{(resultRequest3)在
})
...

您可以尝试以下方法:

func getObservable1() -> Observable<API1Response> {
  return .empty()
}

func getObservable2(_ param: API1Response) -> Observable<API2Response> {
  return .empty()
}

func getObservable3(_ param: API2Response) -> Observable<API3Response> {
  return .empty()
}

func request() {
  getObservable1()
    .flatMap { api1Response in
      return getObservable2(api1Response).map { (api1Response, $0) }
    }
    .flatMap { api1Response, api2Response in
      return getObservable3(api2Response).map { (api1Response, api2Response, $0) }
    }
    .subscribe(onNext: { api1Response, api2Response, api3Response  in

    })
}
func getobserve1()->可观察{
return.empty()
}
func getobserve2(param:API1Response)->可观察{
return.empty()
}
func getobserve3(param:API2Response)->可观察{
return.empty()
}
func请求(){
getobserve1()
.flatMap{API1响应于
返回getobserve2(api1Response).map{(api1Response,$0)}
}
.flatMap{api1Response,api2Response in
返回getobserve3(api2Response).map{(api1Response,api2Response,$0)}
}
.subscribe(onNext:{api1Response,api2Response,api3Response in
})
}

我希望响应符合先决条件顺序。Observable2使用Observable1的响应作为参数。实际上,最后,我想同时使用response1,response2,response3。但是response2依赖于response1,response3依赖于response2。谢谢这就是我要找的。我在问题中添加了您的可运行代码。非常感谢!
1
2
12
Observable.combineLatest(requestObservable1, requestObservable2)
  .flatMap { (requestResult1, requestResult2) -> Observable<You-Data-Type> in
     // Use result from request #1 & #2
     return requestObserver3
  }.subscribe(onNext: { (resultRequest3) in
  })
  ...
func getObservable1() -> Observable<API1Response> {
  return .empty()
}

func getObservable2(_ param: API1Response) -> Observable<API2Response> {
  return .empty()
}

func getObservable3(_ param: API2Response) -> Observable<API3Response> {
  return .empty()
}

func request() {
  getObservable1()
    .flatMap { api1Response in
      return getObservable2(api1Response).map { (api1Response, $0) }
    }
    .flatMap { api1Response, api2Response in
      return getObservable3(api2Response).map { (api1Response, api2Response, $0) }
    }
    .subscribe(onNext: { api1Response, api2Response, api3Response  in

    })
}