如何避免Await.result?
How to avoid Await.result?
我有我的 Play
应用程序,我想自己实现某种唯一性验证,我使用 Slick
,所以我很自然地进行了一个简单的 sum(1) where
调用并且如果 count
大于零,我将错误设置为我的 case class object
。所以我无法想象在我的数据库查询中避免 Await.result
的解决方法,因为我需要在当前时间正确设置错误。
但我现在认为 Await.result
真的很糟糕,有什么建议吗?
你应该在未来使用地图:
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
}
我有我的 Play
应用程序,我想自己实现某种唯一性验证,我使用 Slick
,所以我很自然地进行了一个简单的 sum(1) where
调用并且如果 count
大于零,我将错误设置为我的 case class object
。所以我无法想象在我的数据库查询中避免 Await.result
的解决方法,因为我需要在当前时间正确设置错误。
但我现在认为 Await.result
真的很糟糕,有什么建议吗?
你应该在未来使用地图:
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
}