我想知道为什么以下函数doesMsgExist()
总是返回false
,即使数据库的结果不为空。
def doesMsgExist(name: String, age: String): Boolean = {
var result = false
val msgExistsFlag = checkExistingMessages(db.getDocument(name, age))
msgExistsFlag.foreach(isTrue => result = if(isTrue) false else true)
result
}
def checkExistingMessages(resultFromDB: Future[List[BSONDocument]]): Future[Boolean] = {
resultFromDB.map { list =>
if (list.isEmpty) {
false
}
else true
}
}
答案 0 :(得分:2)
您正在立即返回result
,但您正在使用Future
对其进行评估。这意味着正在创建表示计算的对象,但是当计算将解决时,您无法保证。因此,您返回的值为false
。
将Future
视为未来将要发生的某些行动的占位符。如果你想捕获实际结果,你应该用这样的签名做一些事情:
def doesMsgExist(name: String, age: Boolean): Future[Boolean] =
并使用Future
返回评估。如果没有,您将不得不用Await
围绕它。