Rx Java 根据布尔值调用 Api
Rx Java Calling Api's based on boolean values
我是 RX 的新手 java,我知道如何使用 zip 或平面地图,但是我有如下问题,我觉得没有选择:
我有一个正在尝试重构的方法:
updateDetails(emailAddress: String?, updateEmail: Boolean,
nickName: String?, updateNickName: Boolean,
avatarFile: File?, updateAvatar: Boolean)
现在我根据方法中的每个布尔值确定是否更新电子邮件、昵称或头像。早些时候,这是通过使用 if 条件和单独的 API 调用实现的。有没有一种方法可以使用提供的标志压缩或组合调用?
你可以用阻塞的方式实现它:
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()
}
我是 RX 的新手 java,我知道如何使用 zip 或平面地图,但是我有如下问题,我觉得没有选择:
我有一个正在尝试重构的方法:
updateDetails(emailAddress: String?, updateEmail: Boolean,
nickName: String?, updateNickName: Boolean,
avatarFile: File?, updateAvatar: Boolean)
现在我根据方法中的每个布尔值确定是否更新电子邮件、昵称或头像。早些时候,这是通过使用 if 条件和单独的 API 调用实现的。有没有一种方法可以使用提供的标志压缩或组合调用?
你可以用阻塞的方式实现它:
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()
}