Как запустить несколько Observables одновременно в RxJava? - PullRequest
0 голосов
/ 28 февраля 2019

Я разрабатываю приложение для Android.

Я хочу показать два значения в пользовательском интерфейсе.Значения извлекаются с сервера API, и я использую Retrofit для их получения.

Вот мой интерфейс ApiService (Retrofit):

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 ().

Я хочу отправить их одновременно.

Как я могу это сделать?

1 Ответ

0 голосов
/ 28 февраля 2019

Вы можете установить одновременное соединение, используя оператор 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)
...