在光滑和scalatra中使用期货

时间:2016-03-06 13:31:05

标签: scala slick scalatra

我正在尝试处理我从光滑中获得的未来,以便生成对请求的响应,但我仍然坚持" async"一部分。

这是一个片段:

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

现在,db.run调用返回Future [Option [User]]。如何根据选项的内容返回响应?

1 个答案:

答案 0 :(得分: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

中找到更多详细信息