Playframework 播放框架:Promise VS Action.async

Playframework 播放框架:Promise VS Action.async,playframework,Playframework,Promise和Action.async都可以用于处理高性能的并发请求。但是有什么区别呢?承诺和未来有点像互补的东西 您返回一个包含“最终计算数据”的未来。使用promise,您可以创建一个未来,将它传递到其他地方,代码的其他部分将知道它必须等待它(我不是说阻塞!),通过在promise上设置一个值,您将注入“最终计算的数据”,使其可用 这和游戏有什么关系 好的,通过使用Action.async返回的不是响应,而是包装在Future->Future[Response]中的响应 基本上,您可以创建

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

承诺和未来有点像互补的东西

您返回一个包含“最终计算数据”的未来。使用promise,您可以创建一个未来,将它传递到其他地方,代码的其他部分将知道它必须等待它(我不是说阻塞!),通过在promise上设置一个值,您将注入“最终计算的数据”,使其可用

这和游戏有什么关系

好的,通过使用
Action.async
返回的不是响应,而是包装在Future->Future[Response]中的响应

基本上,您可以创建一个承诺,将未来返回给调用方,并在其他地方“完成”该承诺

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

timeoutFuture是使用一个承诺创建的,该承诺将在一秒钟后将其值设置为“Oops”。如果IntensiveComputation首先完成,它将被传递给调用者

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)
  }
}