如何知道当Kotlin协程使用Task <T> API时任务是否失败?

Sourav Kannantha B

使用回调将用户登录到Kotlin中的Firebase的经典方法是:

FirebaseAuth.getInstance().signInWithCredential(credential).addOnCompleteListener {
    if(it.isSuccessful) {
        Toast.maketext("Login successful", Toast.LENGTH_SHORT).show()
        val authResult = it.result
        // Do other stuff
    } else {
        Toast.maketext("Login failed", Toast.LENGTH_SHORT).show()
        // Handle failure
    }
}

使用Play服务Kotlin Couroutines,可以将其简化为:

CoroutineScope(Dispatchers.IO).launch {
    try {
        val authResult = FirebaseAuth.getInstance().signInWithCredential(credential).await()
        Toast.maketext("Login successful", Toast.LENGTH_SHORT).show()
        // Do other stuff
    } catch (e: Exception) {
    }
}

现在我很困惑,在哪里处理失败。我本可以在catch块中完成此操作,但是catch块会捕获所有异常。那么我怎么知道哪个异常是由于任务不成功引起的。

文档没有提到任何这些情况,我找不到任何详细解释此部分的资料。

道格·史蒂文森

查看signInWithCredential的文档它可以产生三种不同类型的异常,但是它们都是FirebaseAuthException的子类

您可以:

  1. 缩小要捕获的异常的类型,以使其仅捕获您期望的异常。您可以像这样捕获它们:
try {
    // do sign in
}
catch (e: FirebaseAuthException) {
}

或者您可以单独捕获它们:

try {
    // do sign in
}
catch (e: FirebaseAuthInvalidUserException) {
}
catch (e: FirebaseAuthInvalidCredentialsException) {
}
catch (e: FirebaseAuthUserCollisionException) {
}
  1. 或者,您可以区分所有异常,然后决定要执行的操作:
try {
    // do sign in
}
catch (e: Exception) {
    if (e is FirebaseAuthException) {
        // handle auth exceptions
    }
    else {
        // handle other exceptions
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何获得Kotlin协程工作失败的异常?

来自分类Dev

Android Kotlin协程:使用Global范围是否是反模式?

来自分类Dev

如何使用协程Flow <T>进行DROP_LATEST?

来自分类Dev

如何使用协程Flow <T>进行DROP_LATEST?

来自分类Dev

是否可以在春季靴中使用@Transactional和kotlin协程?

来自分类Dev

Windows任务计划程序如何识别任务是否失败

来自分类Dev

如何按顺序执行定时任务?

来自分类Dev

如何在Julia中杀死任务/协程?

来自分类Dev

如何为并行任务实现协程

来自分类Dev

如何将协程Flow <List <T >>转换为List <T>

来自分类Dev

是否可以使用Boost.Coroutine嵌套协程?

来自分类Dev

如何使用Kotlin协程调用阻塞函数?

来自分类Dev

如何使用Kotlin协程实现计时器

来自分类Dev

如何在集合中使用 Kotlin 的协程

来自分类Dev

协程的产量与任务的产量

来自分类Dev

discord.py如何仅使用代码本身中定义的协程来检测消息是否已发送?

来自分类Dev

Kotlin协程单元测试因“主调度程序的模块初始化失败”而失败

来自分类Dev

Kotlin协程和Android-获取Firestore查询任务结果的结果

来自分类Dev

如何识别SimPy模拟中的耗时任务?

来自分类Dev

测试是否等待协程

来自分类Dev

使用WhenAll和ContinueWith时任务结果的顺序是什么

来自分类Dev

为什么使用updateStateByKey时任务大小会不断增长?

来自分类Dev

使用带有超时任务列表的wait_for

来自分类Dev

如何检查“ IEnumerable <T1>”是否与“ IEnumerable <T2>”协变?

来自分类常见问题

Kotlin协程如何比RxKotlin更好?

来自分类Dev

Kotlin协程-延迟,如何运作?

来自分类Dev

Spring-Boot是否可以处理WebFlux上下文之外的Kotlin协程?

来自分类Dev

Kotlin协程是否在应用程序所在的进程中运行?

来自分类Dev

Kotlin的启动是否在主线程或后台线程中启动协程?

Related 相关文章

  1. 1

    如何获得Kotlin协程工作失败的异常?

  2. 2

    Android Kotlin协程:使用Global范围是否是反模式?

  3. 3

    如何使用协程Flow <T>进行DROP_LATEST?

  4. 4

    如何使用协程Flow <T>进行DROP_LATEST?

  5. 5

    是否可以在春季靴中使用@Transactional和kotlin协程?

  6. 6

    Windows任务计划程序如何识别任务是否失败

  7. 7

    如何按顺序执行定时任务?

  8. 8

    如何在Julia中杀死任务/协程?

  9. 9

    如何为并行任务实现协程

  10. 10

    如何将协程Flow <List <T >>转换为List <T>

  11. 11

    是否可以使用Boost.Coroutine嵌套协程?

  12. 12

    如何使用Kotlin协程调用阻塞函数?

  13. 13

    如何使用Kotlin协程实现计时器

  14. 14

    如何在集合中使用 Kotlin 的协程

  15. 15

    协程的产量与任务的产量

  16. 16

    discord.py如何仅使用代码本身中定义的协程来检测消息是否已发送?

  17. 17

    Kotlin协程单元测试因“主调度程序的模块初始化失败”而失败

  18. 18

    Kotlin协程和Android-获取Firestore查询任务结果的结果

  19. 19

    如何识别SimPy模拟中的耗时任务?

  20. 20

    测试是否等待协程

  21. 21

    使用WhenAll和ContinueWith时任务结果的顺序是什么

  22. 22

    为什么使用updateStateByKey时任务大小会不断增长?

  23. 23

    使用带有超时任务列表的wait_for

  24. 24

    如何检查“ IEnumerable <T1>”是否与“ IEnumerable <T2>”协变?

  25. 25

    Kotlin协程如何比RxKotlin更好?

  26. 26

    Kotlin协程-延迟,如何运作?

  27. 27

    Spring-Boot是否可以处理WebFlux上下文之外的Kotlin协程?

  28. 28

    Kotlin协程是否在应用程序所在的进程中运行?

  29. 29

    Kotlin的启动是否在主线程或后台线程中启动协程?

热门标签

归档