我在方法中使用Flowable数据,并对其进行订阅以获取结果。我需要以一种可以确保代码中的下一条指令将立即运行的方式从subscription方法获取结果。
在我的代码中,我在subscribe方法之后放置了下一条指令。尽管我认为它不会同步运行。
override fun authenticate(route: Route?, response: Response): Request? {
var userForSave: User? = null
if(responseCount(response) >= 2) {
return null
}
userDao.getAll().map({ items -> items.first({ it.userName == user!!.userName} )})
.subscribe({ res -> userForSave = res })
// I need to make sure that the next instruction after subscribe is this
val tokenDto: TokenDto = TokenDto(token = userForSave!!.token, refreshToken = userForSave!!.refreshToken)
val refreshTokenCall = service.refreshToken(tokenDto)
val refreshResponse = refreshTokenCall.execute()
if(refreshResponse.isSuccessful) {
userForSave!!.token = refreshResponse!!.body()!!.token
userForSave!!.refreshToken = refreshResponse!!.body()!!.refreshToken
userDao.update(userForSave!!)
return response.request()
.newBuilder()
.header("Authorization", "Bearer ${userForSave!!.token}")
.build()
}
return null
}
我需要确保我可以在下一条指令中使用“ userForSave”。
答案 0 :(得分:1)
如果需要同步获取Flowable
的第一个发射光,则可以调用blockingFirst()
而不是subscribe(Consumer)
。在您的情况下,它应如下所示:
userForSave = userDao
.getAll()
.map({ items -> items.first({ it.userName == user!!.userName} )})
.blockingFirst()