Вы можете использовать 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)
}
)
}