Why Live data not observe some value in race condition?

Viewed 168

I have some problem with my live data. when I want to set value in my live data in race condition some value not observe in my fragement. here is my detail code:

Here Is My View Model

class AuthNewViewModel(
   private val coroutineDispatcher: CoroutineDispatcher,
   private val authUseCase: AuthUseCase
): ViewModel() {

   private val _sendCode = MutableLiveData<DataResult<SendCode?>>()
   val sendCode: LiveData<DataResult<SendCode?>> = _sendCode

   fun sendCode(req:CodeReq) {
       viewModelScope.launch(coroutineDispatcher) {
           _sendCode.postValue(DataResult.Loading(true))
           authUseCase.sendCode(req)
               .flowOn(Dispatchers.IO)
               .catch {  error ->
                   _sendCode.postValue(error.isError())
               }
               .onCompletion {
                   _sendCode.postValue(DataResult.Loading(false))
               }
               .collect { data ->
                   when (data.meta?.code ?: 0) {
                       in 200..299 -> {
                           _sendCode.postValue(DataResult.Success(data.data))
                       }
                       else -> {
                           _sendCode.postValue(DataResult.ErrorMeta(data.data, data.errorData))
                       }
                   }
               }
       }
   }
}

Here is when I want to triggred my view mode

authNewVM.sendCode(
    CodeReq(
        phone = phoneOrEmail,
        channel = channel,
        type =  Constants.AuthConstants.TYPE_SIGNUP
    )
)

Here is when the data is observe

authNewVM.sendCode.observe(viewLifecycleOwner, Observer {
    when(it){
        is DataResult.Success -> {
            Logs.d("result success")

        }
        is DataResult.Error -> {
            Logs.d("result error")

        }
        
        is DataResult.Loading -> {
            Logs.d("result loading ${it.isLoading}")
        }

        is DataResult.ErrorMeta -> {
            Logs.d("result error meta")
           
        }
    }
})

And the result

result loading true
result loading false

View some time not observe state success, whereas my view model is set value on succes to..

0 Answers
Related