RxJava将Single与Completable结合在一起



我很困惑如何正确使用单身和可压缩。
我有一个返回 Single 的 get 方法,另一个方法只是保存数据而不返回任何内容(可处理(
代码如下所示:

fun getUserInfo() : Single<UserInfo>
fun save(token: Token) : Completable
fun initialize() {
getUserInfo()
.flatMap { 
// Get token from UserInfo : val token = userInfor.getToken()
// Call save(token: Token) method to save data
}
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeBy(
onSuccess = {
// HERE:  Using UserInfo to do somtehing
},
onError = {
Log.d(it)
}
)
}  

如何在平面地图块内编写代码?(或者是否有其他运算符适合此用例?
谢谢

您可以使用flatMapCompletable

fun initialize() {
getUserInfo()
.flatMapCompletable { userInfo: UserInfo ->
// save userInfo somewhere. i.e:
this@MyActivity.userInfo = userInfo
val token = userInfo.getToken()
return@flatMapCompletable save(token) 
}
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeBy(
onComplete = { // <--------- this becomes onComplete instead of onSuccess
// Here, you can use userInfo that you saved
},
onError = {
Log.d(it)
}
)
}  

请注意,在subscribeBy(...)方法中,不要忘记将回调函数名称从onSuccess(...)更改为onComplete(...),因为您要将单个转换为可完成。

或者,如果要将userInfo保留为局部变量,则可以在save(...)方法的可完成项执行完毕后使用toSingleDefault(...)向下游发出它:

fun initialize() {
getUserInfo()
.flatMap { userInfo: UserInfo -> // change back to flatmap
val token = userInfo.getToken()
return@flatMap save(token).toSingleDefault(userInfo) 
}
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeBy(
onSuccess = { userInfo: UserInfo ->
// do something with userInfo ...
},
onError = {
Log.d(it)
}
)
} 

相关内容

  • 没有找到相关文章

最新更新