Tai*_*mal 1 observable ios observer-pattern swift rx-swift
我想使用 RX 从多个 API 下载数据并将它们组合起来。所有这些都将并行执行,然后合并来自所有响应的数据。我在此处的嵌套调用中执行它们并且我想转换代码。
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()
})
}
Run Code Online (Sandbox Code Playgroud)
最近我遇到了类似的问题,我能够使用进行并行网络调用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) { ($0, $1, $2) }
.subscribe(onNext: { xData, yData, zData in
let result = xData + yData + zData
observer.onNext(resultNetworkResponse)
observer.onCompleted()
})
return Disposables.create()
})
}
Run Code Online (Sandbox Code Playgroud)
zip请在此链接中查找有关如何工作的信息
| 归档时间: |
|
| 查看次数: |
2349 次 |
| 最近记录: |