使用firebase firestore的变量比较错误



为什么即使参数正确,res变量总是false

fun isValidUser(_studentEmail: String, _password: String): Boolean {
var res = false
userList.get().addOnSuccessListener { result ->
for (document in result) {
val studentEmail = document.data["studentEmail"] as String
val password = document.data["password"] as String
if (_studentEmail == studentEmail && _password == password) {
res = true
}
}
}
return res
}

这并不像你想象的那样。

userList.get()启动异步任务,这意味着程序将在不等待任务完成的情况下继续执行。

addOnSuccessListener只注册了一个侦听器,这是一段在查询成功完成时运行的代码,但这段代码只会在将来运行,而不是立即运行,因为查询需要一些时间。

当程序到达return res时,查询仍然没有完成,侦听器还没有执行。

如果你想对这些东西进行更有序的推理,你可以使用Kotlin协程扩展来await()结果,而不是注册一个监听器。例如,看看kotlinx协同游戏服务。然而,如果您在理解异步行为方面有困难,那么在深入协作之前,您可能应该阅读更多关于异步行为的内容。

最新更新