检查请求是否返回到数据库

Check that the request returned to the database

我有一个查询数据库的方法。 我想明白。如何检查 table 中是否有符合我条件的行?

def getMessage() = {
  val query = messages.filter(_.status === true)
  val action = query.result.head
  val result = db.run(action)
  //val sql = action.statements.head
  val temp = result.map(_.phone)
  Thread.sleep(3000)
  println(temp.toString)
 }

例如,我需要该方法如何工作的示例逻辑。

    def getMessage():String = {
     val query = messages.filter(_.status === true)
     val action = query.result.head
     val result = db.run(action)
     //val sql = action.statements.head
     val temp = result.map(_.phone)
     Thread.sleep(3000)
     
     if (temp != "null") return temp
     else return "null"
 }

db.run returns a Future 所以你需要在完成后检查结果:

db.run(action).onComplete{
  case Success(res) =>
    // Process result in res
  case Failure(e) =>
    // Handle error case
}

你不应该 Sleep 或等待 Future,所以 getMessage 应该 return Future[String] 调用代码可以处理结果准备好了。

def getMessage(): Future[String] = {
 val query = messages.filter(_.status === true)
 val action = query.result.head
 
 db.run(action)
}

更一般地说,您需要了解 Future 的工作原理以及如何修改结果 (map)、链式多个 Futures (flatMap) 或将多个 Future 作为单个 Future (Future.sequence).

处理

一般来说,您应该尽可能长时间地在 Future 中进行处理。