Scala boolean始终返回false

时间:2016-02-02 18:50:19

标签: scala concurrent.futures

我想知道为什么以下函数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
    }

  }

1 个答案:

答案 0 :(得分:2)

您正在立即返回result,但您正在使用Future对其进行评估。这意味着正在创建表示计算的对象,但是当计算将解决时,您无法保证。因此,您返回的值为false

Future视为未来将要发生的某些行动的占位符。如果你想捕获实际结果,你应该用这样的签名做一些事情:

def doesMsgExist(name: String, age: Boolean): Future[Boolean] =

并使用Future返回评估。如果没有,您将不得不用Await围绕它。