无法处理firebase函数中的异常



我很难理解为什么这个可丢弃的东西没有在我的捕获块中捕获:

CoroutineScope(IO).launch {
try {   FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->
if (task.isSuccessful) {
token = task.result
}
throw Exception("Hi There!")
}).await()
getUsers().await()
}catch (e: Exception){
binding.txtTitle.text = "Error: ${e.message}"
}
}

调用了异常,但应用程序崩溃,catch块无法处理。但是,如果我在addOnCompleteListener之外抛出异常,则会正常处理该异常。我的目标是在没有可用令牌的情况下停止执行getUsers函数。

OnCompleteListener中抛出的异常不会传播到外部作用域,它的作用域是OnCompleteListener块。为了实现您的目标,我建议将代码重写为以下内容:

coroutineScope.launch {
try {
val token: String = FirebaseMessaging.getInstance().token.await()
if (token.isNotEmpty) {
getUsers().await()
}
} catch (e: Exception){
// ...
}
}

await函数等待任务完成。

最新更新