RxJava3
Kotlin
I have the following method and I am trying to control the downstream to return the Pair<Customer, Profile> after the map operator
However, after the first flatMap the data is changes to customer. Basically, I want to return the Pair<Customer, Profile> and not the customer dowwstream.
override fun execute(): Single<Pair<Customer, Profile>> {
return Single.fromObservable(
graphQLProfileService.getCustomerProfile()
).map {
Pair(
it.mdc.toCustomer(),
it.profile
)
} /* Single<Pair<Customer, Profile>> */
.flatMap { /* it: Pair<Customer, Profile> */
updateProfileUseCase.execute(topsCustomer = it.first)
}
.flatMap { /* it: Customer */
updateUserUseCase.execute().toSingleDefault(it) /* it.first, as the first item will be customer */
}
.flatMap { /* it: Customer */
updateAppUseCase.execute().toSingleDefault(it) /* it.first */
}
}
I think the solution should be something like this but I haven't managed to get it to work: https://medium.com/@douglas.iacovelli/rxjava-kotlin-keep-the-original-value-in-a-flatmap-bbd6a6974a99
You have to put those
flatMaps inside aflatMapand once they succeed, you have to replace their results back to the value by ignoring it and concatenating with ajustof the pair: