在使用 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
被评估,将结果返回给用户。这里的诀窍是map
在 Future
content 而不是使用回调,这使您可以对结果进行操作。美妙的部分是它仍然是异步的。从某种意义上说,http 请求线程评估指标不会被阻塞。
关于它的一些文档 here .
关于scala - 在 Play 框架中使用 Scala Future?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18078265/