RX Swift - API 的并行执行

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)

Ala*_*man 6

最近我遇到了类似的问题,我能够使用进行并行网络调用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请在此链接中查找有关如何工作的信息