Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何避免等待结果?_Scala_Playframework_Slick - Fatal编程技术网

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
中要做什么,甚至这也不起作用,这是: