Вы можете добиться этого блокирующим способом:
fun updateDetails(emailAddress: String?, updateEmail: Boolean,
nickName: String?, updateNickName: Boolean,
avatarFile: File?, updateAvatar: Boolean) {
if (updateEmail) {
updateEmail(emailAddress).blockingGet()
}
if (updateNickName) {
updateNickName(nickName).blockingGet()
}
// ...
}
или вы можете построить цепочку, подобную этой, и подписаться на нее в конце:
fun updateDetails(emailAddress: String?, updateEmail: Boolean,
nickName: String?, updateNickName: Boolean,
avatarFile: File?, updateAvatar: Boolean) {
var chain = Completable.complete()
if (updateEmail) {
chain = chain.andThen(updateEmail(emailAddress).ignoreElement())
}
if (updateNickName) {
chain = chain.andThen(updateNickName(nickName).ignoreElement())
}
// ...
chain
.subscribeOn(..)
.observeOn(..)
.subscribe()
}
или объединить цепочки:
fun updateDetails(emailAddress: String?, updateEmail: Boolean,
nickName: String?, updateNickName: Boolean,
avatarFile: File?, updateAvatar: Boolean) {
Completable.defer {
if (updateEmail) {
updateEmail(emailAddress)
.ignoreElement()
} else {
Completable.complete()
}
}
.andThen(Completable.defer {
if (updateNickName) {
updateNickName(nickName)
.ignoreElement()
} else {
Completable.complete()
}
})
// ...
.subscribeOn(..)
.observeOn(..)
.subscribe()
}