如何等待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
相关产品推荐
相关产品推荐

