RX Swift - API 的并行执行
RX Swift - Parallel Execution of APIs
我想以一种可以从多个 API 下载数据并将它们组合在一起的方式使用 RX。所有这些都将并行执行,然后合并来自所有这些响应的数据。我在这里的嵌套调用中执行它们,我想转换代码。
public func searchListings(searchState: SearchState,
renderState: SearchRenderState) - Observable<PropertyNetworkResponse {
return Observable.create({ (observer) - Disposable in
_ = self.getXData(searchState: searchState, renderState: renderState).subscribe(onNext: { (xData) in
_ = self.getYData(searchState: searchState, renderState: renderState).subscribe(onNext: { (yData) in
_ = self.getZData(searchState: searchState, renderState: renderState).subscribe(onNext: { (zData) in
let results = xData + yData + zData
observer.onNext(resultNetworkResponse)
observer.onCompleted()
}, onError: { (error) in
observer.onError(error)
}, onCompleted: nil, onDisposed: nil)
}, onError: { (error) in
observer.onError(error)
}, onCompleted: nil, onDisposed: nil)
}, onError: { error in
observer.onError(error)
}, onCompleted: nil, onDisposed: nil)
return Disposables.create()
})
}
最近我遇到了类似的问题,我能够使用 zip
进行并行网络调用。试试下面的代码:
public func searchListings(searchState: SearchState,
renderState: SearchRenderState) - Observable<PropertyNetworkResponse {
let observableX = self.getXData(searchState: searchState, renderState: renderState)
let observableY = self.getYData(searchState: searchState, renderState: renderState)
let observableZ = self.getZData(searchState: searchState, renderState: renderState)
return Observable.create({ (observer) -> Disposable in
_ = Observable.zip(observableX, observableY, observableZ) { ([=10=], , ) }
.subscribe(onNext: { xData, yData, zData in
let result = xData + yData + zData
observer.onNext(resultNetworkResponse)
observer.onCompleted()
})
return Disposables.create()
})
}
请在此 link
中查找有关 zip
工作原理的信息
我想以一种可以从多个 API 下载数据并将它们组合在一起的方式使用 RX。所有这些都将并行执行,然后合并来自所有这些响应的数据。我在这里的嵌套调用中执行它们,我想转换代码。
public func searchListings(searchState: SearchState,
renderState: SearchRenderState) - Observable<PropertyNetworkResponse {
return Observable.create({ (observer) - Disposable in
_ = self.getXData(searchState: searchState, renderState: renderState).subscribe(onNext: { (xData) in
_ = self.getYData(searchState: searchState, renderState: renderState).subscribe(onNext: { (yData) in
_ = self.getZData(searchState: searchState, renderState: renderState).subscribe(onNext: { (zData) in
let results = xData + yData + zData
observer.onNext(resultNetworkResponse)
observer.onCompleted()
}, onError: { (error) in
observer.onError(error)
}, onCompleted: nil, onDisposed: nil)
}, onError: { (error) in
observer.onError(error)
}, onCompleted: nil, onDisposed: nil)
}, onError: { error in
observer.onError(error)
}, onCompleted: nil, onDisposed: nil)
return Disposables.create()
})
}
最近我遇到了类似的问题,我能够使用 zip
进行并行网络调用。试试下面的代码:
public func searchListings(searchState: SearchState,
renderState: SearchRenderState) - Observable<PropertyNetworkResponse {
let observableX = self.getXData(searchState: searchState, renderState: renderState)
let observableY = self.getYData(searchState: searchState, renderState: renderState)
let observableZ = self.getZData(searchState: searchState, renderState: renderState)
return Observable.create({ (observer) -> Disposable in
_ = Observable.zip(observableX, observableY, observableZ) { ([=10=], , ) }
.subscribe(onNext: { xData, yData, zData in
let result = xData + yData + zData
observer.onNext(resultNetworkResponse)
observer.onCompleted()
})
return Disposables.create()
})
}
请在此 link
中查找有关zip
工作原理的信息