如何避免Await.result?

时间:2016-06-27 11:59:10

标签: scala playframework slick

我有Play个应用,我希望自己实现一种唯一性验证,我使用Slick,所以我做一个简单的sum(1) where调用很自然,如果是这样的话count大于零我将错误设置为case class object。所以我无法想象在我的数据库查询中避免Await.result的解决方法,因为我需要在当前时间设置错误。

但我现在认为Await.result是非常糟糕的做法,有什么建议吗?

1 个答案:

答案 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
}