微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

这是我的视图模型

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 举报,一经查实,本站将立刻删除。