LiveDataScop излучать не звонит - PullRequest
2 голосов
/ 30 января 2020

У меня возникла очень необычная проблема, когда LiveDataScope не выдает мое исключение, запущенное в моем хранилище. Проблема заключается в том, что если вместо emit я помещаю событие livingata, оно отправляется наблюдателю, однако с помощью emit оно не запускает событие для него.

ViewModel:

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

базовый репозиторий

  suspend fun getAsyncData(params: P): T {
    try {
        return api.invoke(params)
    } catch (error: Exception) {
        error.printStackTrace()
        throw error
    }
}

Как я уже упоминал, при изменении emit на другие liveata, это наблюдается по активности и любому коду перед этим. Излучение читается так же, как и Log, et c.

1 Ответ

0 голосов
/ 30 января 2020

Из документов:

Строительный блок liveData служит структурированным примитивом параллелизма между сопрограммами и LiveData. Блок кода начинает выполняться , когда LiveData становится активным , и автоматически отменяется после настраиваемого тайм-аута, когда LiveData становится неактивным.

root вызывает, почему ваш наблюдатель не сработал после вызова Функция emit заключается в том, что ваши liveData были обнаружены (активированы).

Строительный блок LiveData больше подходит для инициализации значения liveData, чем для изменения его значения. Если вы хотите изменить значение liveData, просто используйте mutableLiveData

...