我有这个代码来检查firestore 中是否已经存在用户
1 private fun usernameRepeated(db: FirebaseFirestore, username: String): Boolean {
2 var res = false
3 db.collection("User").whereEqualTo("username", username).get().addOnSuccessListener { task ->
4 res = task.documents.isNotEmpty()
5 }
6 return res
7 }
但它不起作用。我已经调试了在第2、4和6行设置断点的代码。当调试器到达这一点时,它正确地运行第2行和第3行,但跳过第4行,直接转到第6行,总是返回"0";false";。在运行完我调用这个函数的其余行很长一段时间后,它会返回并只运行第4行,此时已经太晚了。
它不会跳过该部分,而是仅在从数据库检索结果时异步执行。
实际情况是,该方法返回False,然后才执行回调。
您应该传递一个回调,而不是返回结果
private fun usernameRepeated(db: FirebaseFirestore, username: String, onSuccess: (result: Task) => Boolean): Boolean {
db.collection("User").whereEqualTo("username", username).get().addOnSuccessListener { onSuccess }
}
或者,您可以使用协程、RxJava或其他API 来阻止请求