gpt4 book ai didi

android - RxJava 结合 Single 和 Completable

转载 作者:行者123 更新时间:2023-12-02 12:46:18 25 4
gpt4 key购买 nike

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

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)
}
)
}

里面怎么写代码 平面 map 堵塞 ? (或者是否有其他适合此用例的运算符?)
谢谢

最佳答案

您可以使用 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作为局部变量,您可以使用 toSingleDefault(...)一旦从您的 save(...) 完成,将其发送到下游方法执行完毕:
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)
}
)
}

关于android - RxJava 结合 Single 和 Completable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59674590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com