You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何等待Firestore数据库响应后再继续执行代码?

解决Firestore异步操作完成后再执行后续代码的问题

你的代码里Firestore的update()是异步操作,调用后会立即返回,后面的if判断代码会在数据库更新完成前就执行,导致error变量还没被修改,Toast提示永远不符合实际操作结果。下面提供两种可行的解决方法:

方法一:将后续逻辑移到回调内部

直接把Toast提示逻辑放到成功和失败的监听器里,确保只有操作完成后才触发对应的提示,无需依赖error变量:

db.collection("markers").document(markerID).update(
    mapOf(
        "titulo" to title,
        "descripcion" to description
    )
).addOnSuccessListener {
    Log.d(TAG, "DocumentSnapshot successfully updated!")
    Toast.makeText(this.requireContext(), "Cambio realizado", Toast.LENGTH_SHORT).show()
}
.addOnFailureListener { e ->
    Log.e(TAG, "Error updating document", e)
    Toast.makeText(this.requireContext(), "No tiene permisos", Toast.LENGTH_SHORT).show()
}

方法二:用Kotlin协程实现“同步式”异步调用

如果项目使用Kotlin协程,推荐用await()方法等待Firestore操作完成,让异步代码逻辑更简洁易读:

lifecycleScope.launch {
    try {
        db.collection("markers").document(markerID).update(
            mapOf(
                "titulo" to title,
                "descripcion" to description
            )
        ).await()
        Log.d(TAG, "DocumentSnapshot successfully updated!")
        Toast.makeText(requireContext(), "Cambio realizado", Toast.LENGTH_SHORT).show()
    } catch (e: Exception) {
        Log.e(TAG, "Error updating document", e)
        Toast.makeText(requireContext(), "No tiene permisos", Toast.LENGTH_SHORT).show()
    }
}

await()会挂起协程,直到Firestore操作完成:成功则执行后续代码,失败则进入catch块处理异常。

内容的提问来源于stack exchange,提问作者andbal23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 17:12:13