2016-03-06 2 views
0

Я пытаюсь обработать будущее, которое я получил от пятна, чтобы генерировать ответ на запрос, но я застрял в «асинхронной» части.Работа с фьючерсами в slick и scalatra

Вот отрывок:

get("/tmp") { 
    new AsyncResult() { 
    override val is: Future[_] = db.run(Users.findUserWithLogin("user")) 
    } 
} 

Теперь вызов db.run возвращает будущее [Option [User]]. Как вернуть ответ в зависимости от содержимого параметра?

ответ

2

В этом случае вам нужно отобразить будущее, возвращенное Slick, в результат, который вы хотите, а не задавать is непосредственно на результат Slick. Таким образом, следующий будет примером того, как можно справиться с этим:

get("/tmp") { 
    new AsyncResult() { 
    val is = db.run(Users.findUserWithLogin("user")) map { 
     case Some(u) => //return some stuff about the user 
     case None => //return some stuff about user not being found 
    } 
    } 
} 

Как отмечалось в комментариях ниже, то AsyncResult не является строго необходимым. Вы можете найти более подробную информацию в Scalatra documentation.

+1

Это, и 'AsyncResult' не [строго необходимо] (http://www.scalatra.org/2.4/guides/async/akka.html#toc_173). – Esardes

+0

@Esardes Спасибо за комментарий. Я отредактирую ответ для добавления. – DemetriKots