【发布时间】:2020-03-24 08:51:38
【问题描述】:
在下面的代码中,我正在获取一些数据。如果抛出错误/异常,我希望异常处理程序捕获它。完成获取后,我将使用LiveData 将结果发布给正在观察的人。
我想要实现的是异常处理程序在我发布结果后完成其工作。这意味着,如果处理结果的观察者也抛出异常,我不希望协程异常处理程序捕获它(下面的代码就是这种情况)。
fun loadPrerequisites(resultObserver: MutableLiveData<PrerequisiteDataHolder?>) {
val exceptionHandler = CoroutineExceptionHandler { _, throwable ->
resultObserver.postValue(null)
}
scope.launch(Dispatchers.IO + exceptionHandler) {
val deferredCreationScheme = async {
fetchCreationScheme()
}
val creationScheme = deferredCreationScheme.await()
//TODO remove exception handler at this stage?
resultObserver.postValue(PrerequisiteDataHolder(creationScheme))
}
}
有没有办法在将结果发布到 LiveData 之前删除异常处理程序?还是我必须引入一个新范围?
【问题讨论】: