Scala 如何避免等待结果?
我有我的Scala 如何避免等待结果?,scala,playframework,slick,Scala,Playframework,Slick,我有我的Play应用程序,我想自己实现某种唯一性验证,我使用Slick,所以很自然地,我做一个简单的求和(1),其中调用,如果计数大于零,我将错误设置为我的案例类对象。因此,我无法想象如何在DB查询中避免Await.result,因为我需要在当前时间内正确设置错误 但我现在知道,正在等待。结果真的很糟糕,有什么建议吗?你应该在未来使用地图: db.run(query.result) map { response => //do whatever you want with the re
Play
应用程序,我想自己实现某种唯一性验证,我使用Slick
,所以很自然地,我做一个简单的求和(1),其中
调用,如果计数
大于零,我将错误设置为我的案例类对象
。因此,我无法想象如何在DB查询中避免Await.result
,因为我需要在当前时间内正确设置错误
但我现在知道,
正在等待。结果
真的很糟糕,有什么建议吗?你应该在未来使用地图:
db.run(query.result) map { response =>
//do whatever you want with the response
}
在这种情况下,您得到了响应,但它没有阻塞,因为wait.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(...) map { result =>
if (result == true)
//doSomething
}
您应该在未来使用地图:
db.run(query.result) map { response =>
//do whatever you want with the response
}
在这种情况下,您得到了响应,但它没有阻塞,因为wait.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(...) map { result =>
if (result == true)
//doSomething
}
是的,当然,但假设我需要执行验证,比如:状态验证+状态验证+唯一性验证+唯一性验证,所以我看不到如何使这个未来的东西在这里链接前两个将是布尔的类型,如果我使用map,这个将是未来的[Boolean]
,我想不出这个问题的解决方案在地图中,响应不是Future[Boolean]类型,而是Boolean类型。因此,您可以进行所需的任何检查,然后返回一个Future[Boolean]。如果你想让我解释你的真实情况,请发布你的代码。这是应该显示问题的最小代码,正如您可以看到当前实现使用的wait.result
是的,对于这一步我可以做到,我不知道在CountryValidator
中要做什么,即使这样也不起作用,这是:是的,当然,但假设我需要执行验证,比如:状态验证+状态验证+唯一性验证+唯一性验证,所以我看不到如何使这个Future
东西在这里链接前两个将是Boolean
类型,如果我使用map,这个将是Future[Boolean]
,我想不出这个问题的解决方案在地图中,响应不是Future[Boolean]类型,而是Boolean类型。因此,您可以进行所需的任何检查,然后返回一个Future[Boolean]。如果你想让我解释你的真实情况,请发布你的代码。这是应该显示问题的最小代码,正如您可以看到当前实现使用的Await.result
是的,对于这一步我可以做到,我不知道在CountryValidator
中要做什么,甚至这也不起作用,这是: