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