如何解决更新Firestore文档时的协程JobCancellationException
调用我的ViewModel的saveUser()
后,Firebase Firestore文档成功更新,但是协程作业被取消,捕获了JobCancellationException
,并且日志"User #${user.id} saved !"
从未被打印。这种取消来自何处?如何完成?
// 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
}
}
解决方法
某事正在取消该工作,您的协程也正在适当配合。
由于使用viewModelScope
启动协程,可能是因为您的ViewModel已清除。除非销毁了其所有者(片段或活动),否则不应销毁ViewModel。您是在尝试在活动期间调用finish()
还是执行Fragment交易?
或者,可能是协程上下文中的其他原因由于错误而取消了Job。我的猜测是对documentReference.set(user)
的调用会导致某些错误,而await()
可能会取消工作。
还要确保您对Firestore,Jetpack和KTX扩展的依赖关系是最新的。这可能是已修复的错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。