Объединить результат трех API в RxKotlin - PullRequest
0 голосов
/ 12 марта 2020

У меня есть функция в хранилище, которая вызывает три API, которые возвращают три различных типа объектов.

fun scanSource(code: String) =
    firstApi.DataV11Get(code)
        .flatMap {
            firstApi.sccGet(it.sscc)
        }
        .flatMap {
            lastApi.lsccGet(it.id)
        }

в настоящее время он возвращает только результат последнего API в ViewModel. Теперь я хочу получить результат всех этих действий в ViewModel.

плюс API должны быть последовательными, так как они используют данные из последнего API.

Также каждый API возвращает свой тип объекта. И я хочу, чтобы все три объекта были завершены после завершения всех трех вызовов.

Спасибо

1 Ответ

2 голосов
/ 12 марта 2020

Объявите эту функцию в вашем репозитории Api

   fun getJobs(contractor_id: String): Observable<JobListModel> {
    return Observable.zip(
        apiInterface.pendingJobs(contractor_id, 0, 5),
        apiInterface.activeJobs(contractor_id, 0, 5),
        apiInterface.completedJobs(contractor_id, 0, 5),
        apiInterface.cancelledJobs(contractor_id, 0, 5),
        Function4<PendingJobResponseModel, ActiveJobResponseModel, CompletedJobResponseModel, CancelledJobResponseModel, JobListModel> { p, a, c, ca ->
            JobListModel(p, a, c, ca)
        }
    )
}

Это метод создания zip для нескольких запросов и модели.

Пожалуйста, обратитесь к этой ссылке для более подробного объяснения Rx java Android как использовать оператор Zip

Job ListModel Класс, который отображает все ответы

class JobListModel(
val pendingJobResponseModel: PendingJobResponseModel,
val activeJobResponseModel: ActiveJobResponseModel,
val completedJobResponseModel: CompletedJobResponseModel,
val cancelledJobResponseModel: CancelledJobResponseModel) : Serializable
...