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

时间:2019-02-28 03:38:29

标签: android kotlin retrofit rx-java

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

我想在UI中显示两个值。 这些值是从API服务器检索的,我正在使用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()”。

我想同时发送它们。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

您可以使用zip运算符和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)