为什么实时数据在竞争条件下没有观察到一些值?

问题描述

我的实时数据有问题。当我想在竞争条件下在实时数据中设置值时,我的片段中没有观察到某些值。这是我的详细代码

这是我的视图模型

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))
                       }
                   }
               }
       }
   }
}

这是我想触发我的视图模式的时候

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

这是观察数据的时候

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")
           
        }
    }
})

结果

result loading true
result loading false

查看一段时间未观察到状态成功,而我的视图模型设置为成功值..

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)