首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新修复文档的协同JobCancellationException

更新修复文档的协同JobCancellationException
EN

Stack Overflow用户
提问于 2020-09-14 12:13:16
回答 1查看 227关注 0票数 2

调用my的saveUser()后,Firestore文档将被成功更新,但协同作业会被取消,捕捉到一个JobCancellationException,并且日志"User #${user.id} saved !"永远不会被打印。这个取消是从哪里来的?它怎么才能完成呢?

代码语言:javascript
复制
// ViewModel.kt

fun saveUser(user: User) {
    viewModelScope.launch(Dispatchers.IO) {
        Repository.saveUser(user)
        Log.d("test", "User #${user.id} saved !")
    }
}

// Repository.kt

suspend fun saveUser(user: User) {
    val documentReference = db
        .collection(USERS_COLLECTION).document(user.id)

    try {
        documentReference.set(user).await()
        Log.d("test", "Good")
    } catch (e: Exception) {
        Log.e("test", "Not good") // catches a JobCancellationException
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-23 06:46:41

有些事情正在取消这项工作,而你的合作是适当的合作。

可能是您的ViewModel正在被清除,因为您正在使用viewModelScope启动协同线。ViewModel不应该被销毁,除非它的所有者(片段或活动)被销毁。在这种情况发生时,您是在尝试在活动中调用finish(),还是执行片段事务?

或者,可能是协同上下文中的其他内容由于错误而取消了作业。我的猜测是,对documentReference.set(user)的调用导致了一些错误,而await()可能正在取消该作业。

还要确保您对Firestore、Jetpack和KTX扩展的依赖关系是最新的。这可能是一个已经修复的bug。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63884115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档