在Playframework中使用Scala Future?

i.a*_*iel 5 scala playframework-2.0

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

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

myFunction.onComplete {
    case Success(myString) => // Du Stuff
    case Failure(error) => // Error handling
}
Run Code Online (Sandbox Code Playgroud)

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

编辑:我应该补充一点,我正在使用Play-2.2.x分支,它已经为Scala Future交易了Play Future.

Jat*_*tin 7

你可以使用Async:

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

基本上你告诉play:每当myFunction评估时,将结果返回给User.这里的诀窍是mapFuture内容而不是使用回调,这使您可以对结果进行操作.

美妙的部分是它仍然是异步的.从某种意义上说,http请求线程评估索引不会被阻止.

这里有一些文档.