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
})
}