#android #kotlin #rxjava #retrofit2
Пытаюсь освоить работу с RxJava + retrofit2 + kotlin. Как в этом участвует Observable в общем разобрался, даже научился объединять результаты 2-3 параллельных запросов по итогу выполнения всех с помощью Observable.zip, НО как похожим образом выполнить более 3 параллельных запросов не могу понять. В исходном коде класса Observable есть метод staticObservable zip(), но он не работает как static Observable zip() в случае с тремя Observable на вход и Function3<*,*,*,*>. Старался уже сделать первые три запроса с помощью zip, потом flatMap и тд, но всё не выходит. Чтение документации и примеров не помогают повернуть к нужному направлению. Смотрел в сторону Observable.combineLatest, но пришел к выводу (может ошибочному), что метод вернет результат первого выполнившегося Observable. Если в целом, что я хочу: У меня есть 4 метода, которые возвращают Observable: this.orderRepository.getStatuses():Observable this.orderRepository.getOrders():Observable this.userRepository.getUsers():Observable this.orderRepository.getTypes():Observable Подскажите, пожалуйста, как я должен скомпоновать эти методы, чтобы они выполнились параллельно, и в конце получить результат выполнения всех 4 методов в одном месте? Мои стыдливые попытки ниже. Это уже что-то испорченное, но я вообще не понимаю, что я должен сделать с 4 Observables, чтобы их всех в одном месте и вернуть в UI. + уже запутался с flatMap, map и так далее... override fun buildUseCaseObservable(params: Params): Observable { return Observable.zip( this.userRepository.getUsers(100, 1, ApiUserFilter(isManager = true)), this.orderRepository.getOrderStatuses(), this.orderRepository.getOrderTypes(), Function3 { t1, t2, t3 -> Zip(t1,t2,t3) }).map { this.orderRepository.getOrders(params.limit, params.page, params.filter).flatMap { it } } }
Ответы
Ответ 1
Zip для четырех observable можно написать так: Observable.zip( getStatuses(), getOrders(), getUsers(), getTypes(), Function4 { status, order, user, type -> ... } )
Комментариев нет:
Отправить комментарий