Android LiveDataScope不发出调用

Android LiveDataScope不发出调用,android,viewmodel,android-livedata,kotlin-coroutines,Android,Viewmodel,Android Livedata,Kotlin Coroutines,我遇到了一个非常不寻常的问题,LiveDataScope没有抛出在我的存储库中启动的异常。 问题是,如果我放置了一个livedata事件来代替emit,它将被分派给观察者,但是使用emit,它不会向观察者启动事件 视图模型: fun launchJob(makeThis: suspend LiveDataScope<ViewState>.() -> Unit): LiveData<ViewState> = liveData { viewMod

我遇到了一个非常不寻常的问题,LiveDataScope没有抛出在我的存储库中启动的异常。 问题是,如果我放置了一个livedata事件来代替emit,它将被分派给观察者,但是使用emit,它不会向观察者启动事件

视图模型:

fun launchJob(makeThis: suspend LiveDataScope<ViewState>.() -> Unit): LiveData<ViewState> =
    liveData {
        viewModelScope.launch {
            emitLoad()
            try {
                makeThis(this@liveData)
            } catch (error: Error){
                //its work
                showErrorEvent.value = Pair(error, true)

                // not work
                emit(ViewState.Error(error))
            }
        }
    }
      viewmodel implementation
/**
 * Método responsável por realizar o método de reset de senha.
 * */
    fun requestReset() = launchJob {
         emitSucess(shippingMethodRepository.resetPassword(method))
    }
正如我提到的,将emit更改为不同的livedata,活动会观察到它,读取emit之前的任何代码以及日志等。

来自文档:

liveData构建块用作结构化并发 协同程序和LiveData之间的原语。代码块启动 当LiveData处于活动状态时执行,并自动取消 当LiveData变为非活动状态时,在可配置的超时之后

调用emit函数后,观察者未被触发的根本原因是,您的liveData已被观察(激活)


LiveData构建块更适合初始化LiveData值,而不是更改其值。如果您想这样更改liveData值,只需使用可变liveData即可,谢谢收听。那么,livedata builder是用于创建而不是更改livedata值的吗?像流?是的,它就像流创建一样,但是流数据更改可以通过
collect()
函数进行观察,而不需要lifeCycleOwner,这使得流不是生命周期意识是有意义的,但是在livedata范围的问题上,它是要被观察的,生成通用代码,在try{}catc{}中,我可以接收所有发射,问题在于存储库的捕获。您好,请参阅文档中的这一行:也可以发布多个值​​从街区出来。每次emit()调用都会暂停块的执行,直到主线程中定义了LiveData值。
  suspend fun getAsyncData(params: P): T {
    try {
        return api.invoke(params)
    } catch (error: Exception) {
        error.printStackTrace()
        throw error
    }
}