使用 Kotlin 从 Firebase 中删除数据时调用 await() 两次是否正确?
Is it correct to call await() twice when deleting data from Firebase using Kotlin?
我在我的项目中实施了 Firebase 身份验证。我的要求是,当我注销用户时:
- 删除 Firebase 身份验证帐户。
- 从 Firestore 中删除用户帐户。
在我的存储库 class 中,我有这个功能:
suspend fun signOut() {
try {
auth.currentUser?.apply {
delete().await() //Delete Firebase Authentication account
usersRef.document(uid).delete().await() //Delete Firestore data
}
} catch (e: Exception) {
e.printStackTrace()
}
}
这段代码工作正常,但是可以一个接一个地调用两个 await() 函数吗?有 better/safer 方法吗?
这就是我从 ViewModel 调用 signOut() 的方式 class:
fun signOut() = liveData(Dispatchers.IO) {
emit(repository.signOut())
}
您可以在单个函数体中调用任意数量的可挂起函数,在这方面它们与普通函数没有区别。
您进行这些 await()
调用的原因只是使用基于 Task
、Deferred
、Future
等的 API 的结果。 ,这实际上是在您每次调用此类函数时创建并发。
在 Kotlin 中,这样的 API 将被视为遗留的,最佳实践 API 将具有可在内部完成 await()
工作的可挂起函数。在那种情况下,调用这样一个函数的外观和行为与它不可暂停时完全相同。
我在我的项目中实施了 Firebase 身份验证。我的要求是,当我注销用户时:
- 删除 Firebase 身份验证帐户。
- 从 Firestore 中删除用户帐户。
在我的存储库 class 中,我有这个功能:
suspend fun signOut() {
try {
auth.currentUser?.apply {
delete().await() //Delete Firebase Authentication account
usersRef.document(uid).delete().await() //Delete Firestore data
}
} catch (e: Exception) {
e.printStackTrace()
}
}
这段代码工作正常,但是可以一个接一个地调用两个 await() 函数吗?有 better/safer 方法吗?
这就是我从 ViewModel 调用 signOut() 的方式 class:
fun signOut() = liveData(Dispatchers.IO) {
emit(repository.signOut())
}
您可以在单个函数体中调用任意数量的可挂起函数,在这方面它们与普通函数没有区别。
您进行这些 await()
调用的原因只是使用基于 Task
、Deferred
、Future
等的 API 的结果。 ,这实际上是在您每次调用此类函数时创建并发。
在 Kotlin 中,这样的 API 将被视为遗留的,最佳实践 API 将具有可在内部完成 await()
工作的可挂起函数。在那种情况下,调用这样一个函数的外观和行为与它不可暂停时完全相同。