如何解决检查请求是否返回到数据库
我有一个方法可以查询数据库。 我想明白。如何检查表中是否有符合我条件的行?
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
返回 Future
,因此您需要在完成后检查结果:
db.run(action).onComplete{
case Success(res) =>
// Process result in res
case Failure(e) =>
// Handle error case
}
您永远不应该Sleep
或等待Future
,因此getMessage
应该返回Future[String]
并且调用代码可以在它准备好时处理结果。
def getMessage(): Future[String] = {
val query = messages.filter(_.status === true)
val action = query.result.head
db.run(action)
}
更一般地说,您需要查看 Future
的工作原理以及如何修改结果 (map
)、链接多个 Future
(flatMap
) 或处理多个Future
作为单个 Future
(Future.sequence
)。
通常,您应该尽可能长时间地将处理保留在 Future
中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。