Promise和Action.async都可用于处理高性能的并发请求。但是有什么区别?
答案 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"过了一会儿。如果首先完成密集型计算,它将被传递给调用者。