提问者:小点点

Firebase:如何检查文档写入是否成功


我想检查我的数据库写入是否成功,以便向用户显示错误消息。

我目前的方法不起作用,因为它说“类型不匹配,所需的单位找到电子邮件状态”

class EmailRepositoryImpl : EmailRepository {
    private val db = Firebase.firestore

    override fun sendEmail(email: Email): EmailStatus<Nothing> {
        db.collection("emails").document().set(email).addOnCompleteListener {
            if (it.isSuccessful) return@addOnCompleteListener EmailStatus.Success<Nothing>
            if (it.isCanceled) return@addOnCompleteListener EmailStatus.Error(it.exception!!)
        }
    }
}
sealed class EmailStatus<out T> {
    data class Success<out T>(val data: T) : EmailStatus<T>()
    data class Error(val exception: Exception) : EmailStatus<Nothing>()
}

有可能写出这样的东西吗?据我所知有一个通用的firebase错误类型,但我没有找到任何与kotlin或Android相关的东西。。。

我很感激你的帮助,谢谢


共1个答案

匿名用户

问题是AddOnCompleteListener回调不返回任何内容(单元),而您正试图从该作用域返回EmailStatus

你有三种方法吗

  1. 创建一个接口,该接口将填充该值并将该EmailStatus向下返回到您的调用方层
  2. 在完成对firebase的异步调用时,使用协同调用挂起此函数,然后返回该值
  3. 在数据准备处理时使用流提供数据

我认为最简单的方法来做这个一次性操作是使用Coroutines,我已经写了一篇文章在这里