Play Framework:Promise VS Action.async

时间:2014-05-13 11:01:37

标签: playframework

Promise和Action.async都可用于处理高性能的并发请求。但是有什么区别?

1 个答案:

答案 0 :(得分:2)

承诺和期货有点像补充事物。

您将返回一个包含"最终计算数据"的未来。使用promise你可以创建一个未来,将它传递到其他地方,其他部分代码将知道它必须等待它(通过等待我不是意味着阻止!)并通过设置一个值的承诺你将注入"最终计算数据"所以它可用。

与游戏有什么关系?

好吧,使用Action.async返回的不是响应,而是包含在未来中的响应 - >未来[响应]。

基本上,您可以创建一个承诺,将未来返回给来电者并完成"在其他地方的承诺。

一个很好的例子(摘自文档):

def index = Action.async {
  val futureInt = scala.concurrent.Future { intensiveComputation() }
  val timeoutFuture = play.api.libs.concurrent.Promise.timeout("Oops", 1.second)
  Future.firstCompletedOf(Seq(futureInt, timeoutFuture)).map {
    case i: Int => Ok("Got result: " + i)
    case t: String => InternalServerError(t)
  }
}

timeoutFuture是使用一个承诺创建的,该承诺将其值设置为" Oops"过了一会儿。如果首先完成密集型计算,它将被传递给调用者。