Tsudzukeru
@Tsudzukeru

Как выполнить 2 flow запроса одновременно (MVI)?

Как одновременно выполнить 2 flow запроса к серверу используя архитектуру MVI?
1)userInfoUseCase()
2)getCarsListUseCase()
private fun getUserInfo() {
        intent {
            userInfoUseCase()
                .onStart {
                    reduce { state.copy(isLoading = true, isHasError = false) }
                }
                .catch {
                    val errorText = resourceProvider.getString(R.string.something_went_wrong)
                    reduce {
                        state.copy(
                            isLoading = false,
                            isHasError = true
                        )
                    }
                }
                .onEach { user ->
                    driverInfoUseCase(user.id)
                        .onStart {
                            reduce { state.copy(isLoading = true, isHasError = false) }
                        }
                        .catch {
                            val errorText =
                                resourceProvider.getString(R.string.something_went_wrong)
                            reduce {
                                state.copy(
                                    isLoading = false,
                                    errorText = errorText,
                                    isHasError = true
                                )
                            }
                        }
                        .onEach { driver ->
                            getCarsListUseCase(
                                carsFilter = CarsFilter(
                                    pageNumber = FIRST_PAGE,
                                    pageSize = DEFAULT_PAGE_SIZE,
                                    orderSort = OrderSort()
                                )
                            )
                                .onStart {
                                    reduce { state.copy(isLoading = true, isHasError = false) }
                                }
                                .catch {
                                    val errorText =
                                        resourceProvider.getString(R.string.something_went_wrong)
                                    reduce {
                                        state.copy(
                                            isLoading = false,
                                            errorText = errorText,
                                            isHasError = true
                                        )
                                    }
                                }
                                .onEach { cars ->
                                    state.copy(
                                        id = user.id,
                                        avatar = driver.avatar,
                                        customerRating = driver.rating,
                                        name = driver.name,
                                        surname = driver.surname,
                                        additionalContacts = driver.additionalContacts,
                                        email = driver.email,
                                        phone = driver.phone,
                                        passportSerialNumber = user.passportSerialNumber,
                                        passportNumber = user.passportNumber,
                                        licenceData = user.licenseData,
                                        city = driver.city,
                                        organizationName = driver.organizationName,
                                        isLoading = false,
                                        isHasError = false,
                                        carsNumber = cars.totalElements
                                    )
                                }.collect()
                        }.collect()
                }.collect()
        }
    }
  • Вопрос задан
  • 46 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы