Ваше решение не работает просто потому, что вы немедленно создаете экземпляр SessionClass
и никогда не вызываете setUser()
, поэтому getUser().blockingFirst()
заблокируется навсегда. Я предполагаю, что у вас есть экземпляр SessionClass
, который на самом деле будет вызывать setUser()
в какой-то момент.
Ключ к тому, чтобы иметь доступ к пользователю, заключается в объединении Наблюдаемых. Подходящим выбором в этой ситуации является оператор zipWith
. Это позволит вам оперировать значениями из двух источников одновременно. Например, ваш код может выглядеть примерно так:
val session: SessionClass = TODO() // get an instance somewhere
viewModel.login(emailId)
.observeOn(AndroidSchedulers.mainThread())
.zipWith(session.getUser().firstOrError(), BiFunction { (role, images): Pair<Role, Images>, user: User -> Triple(role, images, user) })
.autoDisposable(scopeProvider)
.subscribe({ (role, images, user) ->
analyticsProvider.updateUser(mapOf(Constants.Role to role, Constants.userId to user.userId))
})))