我有Play
个应用,我希望自己实现一种唯一性验证,我使用Slick
,所以我做一个简单的sum(1) where
调用很自然,如果是这样的话count
大于零我将错误设置为case class object
。所以我无法想象在我的数据库查询中避免Await.result
的解决方法,因为我需要在当前时间设置错误。
但我现在认为Await.result
是非常糟糕的做法,有什么建议吗?
答案 0 :(得分:2)
您应该在未来使用地图:
db.run(query.result) map { response =>
//do whatever you want with the response
}
在这种情况下,您会得到响应,但它没有阻止,因为Await.result
是。
编辑:因此,对于您在评论中显示的代码,它看起来像是:
def exists(tableName: String, column: String, value: Any): Future[Boolean] = {
val query = dbConfig.db.run(sql"SELECT COUNT(1) from #$tableName WHERE #$column = ${value.toString};".as[Int])
query.map(_.sum > 0)
}
然后你需要致电exists
,你会做
exists(...) map { result =>
if (result == true)
//doSomething
}