在 slick 和 scalatra 中使用 futures

Working with futures in slick and scalatra

我正在尝试处理我从 slick 获得的未来,以便生成对请求的响应,但我被困在 "async" 部分。

这是一个片段:

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

现在,db.run 调用 returns 一个 Future[Option[User]]。我如何 returns 根据选项的内容进行响应?

在这种情况下,您需要将 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.

中找到更多详细信息