scala - 在 Play 框架中使用 Scala Future?

标签 scala playframework-2.0

在使用 Playframework 时,我有时会遇到这种情况:

def myFunction:Future[String] = {
    // Do some stuff
}

myFunction.onComplete {
    case Success(myString) => // Du Stuff
    case Failure(error) => // Error handling
}

但正如 Scala 文档中所述,Future.onComplete返回一个单位。
Action 时,我如何在 Playframework 中使用它们函数例如期待 SimpleResult ?处理 future 的最佳做法是什么?

编辑:我应该补充一点,我正在使用 Play-2.2.x 分支,该分支已经将 Play Future 换成了 Scala Future。

最佳答案

您可以使用 Async :

def index = Action{
    val myFunction:Future[Option[String]] = //
    Async{
      myFunction.map{
        case Some(x) => Ok(x)
        case None => InternalServerError
      }
    }
}

基本上你告诉 Play :每当myFunction被评估,将结果返回给用户。这里的诀窍是mapFuture content 而不是使用回调,这使您可以对结果进行操作。

美妙的部分是它仍然是异步的。从某种意义上说,http 请求线程评估指标不会被阻塞。

关于它的一些文档 here .

关于scala - 在 Play 框架中使用 Scala Future?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18078265/

相关文章:

scala - 将 Spark DataFrame 模式转换为新模式

scala - 通用 trait 的 case 对象

scala - 喷雾 json 错误 : could not find implicit value for parameter um

scala - 为什么 lines.map 不起作用,但 lines.take.map 在 Spark 中起作用?

java - 使用 ebean 的 sql.Date。 hh :mm:ss not included in MySQL table using util-date Date. getTime()

java - 保存期间检查 Play Framework 模型中更改的属性

scala - 在 Build.scala 中指定插件

scala - 模式匹配中的隐式

Scala 和 Play 框架 2.2.0、Action.async 和 isAuthenticated

playframework - Play Framework : Page cannot be resolved