Получить результат метода подписки Flowable - PullRequest
0 голосов
/ 18 февраля 2019

Я использую текучие данные в своем методе и подписываюсь на них, чтобы получить результат.Мне нужно получить результат от метода подписки таким образом, чтобы я мог убедиться, что следующая инструкция в моем коде будет выполняться немедленно.

В моем коде я поместил следующую инструкцию сразу после метода подписки.Хотя я думаю, что он не будет работать синхронно.

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 голосов
/ 19 февраля 2019

Если вам нужно синхронно получить первое излучение Flowable, вы можете позвонить blockingFirst() вместо subscribe(Consumer).В вашем случае это должно выглядеть так:

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