Работа с фьючерсами в slick и scalatra

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

Вот фрагмент:

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

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


person OlivierH    schedule 06.03.2016    source источник


Ответы (1)


В этом случае вам нужно сопоставить будущее, возвращаемое 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.

person DemetriKots    schedule 06.03.2016
comment
Это и AsyncResult не являются строго необходимыми. - person John K; 06.03.2016
comment
@Esardes Спасибо за комментарий. Я отредактирую ответ, чтобы добавить. - person DemetriKots; 06.03.2016