Я новичок в Scala, Slick и Play, но я пытаюсь сделать небольшую услугу, используя эту технологию. У меня проблема с правильным способом проверки наличия элемента в БД.
Воспроизвести действие — легко увидеть вывод в браузере:
val id = 5
val name = "xx"
def show(): Action async {
dao.isExist(id,name).map(c => Ok(c.toString)
}
Дао
User = TableQuery[UserRow]
def isExist(id:Int, name:String) = {
val res = db.run(User.filter(i => (i.id === id || i.name === name)).result)}
// I would like to do something like
if (res.length > 0) true else false
// or since action is async to return future.
res match {
case 0 => Future(true)
case _ => Future(false)
}
// but this doesnt compile. I came up with
val trueRes = Await.result(res, Duratin.Inf)
// which in not async Action do what I want.
Я думаю, что мне следует избегать использования Await, но в этом случае мне нужно выполнить какое-то действие в зависимости от того, что вернет БД. Не могли бы вы посоветовать, что было бы лучшим шаблоном для решения этого случая?