使用 Kotlin 从 Firebase 中删除数据时调用 await() 两次是否正确?

Is it correct to call await() twice when deleting data from Firebase using Kotlin?

我在我的项目中实施了 Firebase 身份验证。我的要求是,当我注销用户时:

  1. 删除 Firebase 身份验证帐户。
  2. 从 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() 调用的原因只是使用基于 TaskDeferredFuture 等的 API 的结果。 ,这实际上是在您每次调用此类函数时创建并发。

在 Kotlin 中,这样的 API 将被视为遗留的,最佳实践 API 将具有可在内部完成 await() 工作的可挂起函数。在那种情况下,调用这样一个函数的外观和行为与它不可暂停时完全相同。