For LiveData
, is there something similar to blockingNext
or blockingSingle
in RxJava's Observable to get the value synchronously? if not, how can i achieve the same behavior?
You can call getValue()
to return the current value, if there is one. However, there is no "block until there is a value" option. Mostly, that is because LiveData
is meant to be consumed on the main application thread, where indefinitely-blocking calls are to be avoided.
If you need "block until there is a value", use RxJava and ensure that you are observing on a background thread.
With Kotlin coroutines
callbackFlow {
val observer = Observer<Unit> {
trySend(Unit)
}
MutableLiveData<Unit>().also {
it.observeForever(observer)
awaitClose {
it.removeObserver(observer)
}
}
}.buffer(Channel.Factory.CONFLATED)
.flowOn(Dispatchers.Main.immediate)
// e.g. single()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With