获取Flowable的subscription方法的结果

时间:2019-02-18 11:00:21

标签: android kotlin rx-java2

我在方法中使用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”。

1 个答案:

答案 0 :(得分:1)

如果需要同步获取Flowable的第一个发射光,则可以调用blockingFirst()而不是subscribe(Consumer)。在您的情况下,它应如下所示:

userForSave = userDao
        .getAll()
        .map({ items -> items.first({ it.userName == user!!.userName} )})
        .blockingFirst()