首页 > 解决方案 > 如何在 RxJava 中同时运行多个 Observable?

问题描述

我正在开发一个 Android 应用程序。

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

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

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

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

下面是我的演示者代码:

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()”。

我想同时发送它们。

我怎样才能做到这一点?

标签: androidkotlinretrofitrx-java

解决方案


您可以使用带有RxKotlin的zip运算符实现并发连接。

例子)

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

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

推荐阅读