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 工作原理的信息