如何在 RxJava 中同时 运行 多个 Observables?

How to run multi Observables conurrently in RxJava?

我正在开发 Android 应用程序。

我想在 UI 中显示两个值。 这些值是从 API 服务器检索的,我正在使用 Retrofit 来获取它们。

这是我的 ApiService 接口(改造):

interface ApiService {
    @Get
    fun getData1(): Observable<String>

    @Get
    fun getData2(): Observable<String>
}

下面是我的 Presenter 代码:

val data1 = apiService.getData1().map { "d1" to it }
val data2 = apiService.getData1().map { "d2" to it }

Observable.just(data1, data2)
        .flatMap { it }
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe { (type, data) ->
            when (type) {
                "d1" -> view.showData1(data)
                "d2" -> view.showData2(data)
            }
        }

它工作正常。 但这是按顺序进行的。 第一个请求"getData1()"完成后,发送第二个请求"getData2()"。

我想同时发送。

我该怎么做?

您可以使用zip operator with RxKotlin实现并发连接。

示例)

val data1 = apiService.getData1()
val data2 = apiService.getData1()

Observables.zip(data1, data2)
   .subscribe { data ->
       view.showData1(data.first)
       view.showData2(data.second)
   }.addTo(compositeDisposable)