0

所以我得到了一个 SharedFlow ,它在某些情况下会发出一些东西。在另一点上,我得到了一个 try-catch 块,并且只有当 Flow 在执行时收集到一些东西时,我才想跳过对 try 块的进一步执行。同时我不想在收集时阻塞线程。如果没有发出任何内容,我希望 try 块正常执行。所以这是我的第一个想法:

try {
    viewModelScope.launch {
        mySharedFlow.collect { throw myException }
    }
    skipThisIfExceptionWasThrown()
} catch (e: myException) {
    doStuff()
}

使用这个,如果 execption 被抛出,应用程序会崩溃,它不会被捕获。从我在寻找解决方案时阅读的内容来看,您似乎只能在同一个协程中捕获异常。但是这样做不会让我在 viewModelScope 之后跳过进一步的执行。我尝试了很多东西,但最后,我总是以

  1. 在内部捕获异常并且不跳过进一步的执行
  2. 等待一个如果没有发出就永远不会到达的结果,阻止进一步的执行
  3. 未捕获异常,导致应用程序崩溃

非常欢迎针对此问题的任何想法,输入或替代解决方案,在此先感谢。

4

0 回答 0