【发布时间】:2014-02-23 12:03:13
【问题描述】:
我有一个简单的 Play 应用程序,其中控制器操作调用模型方法,该方法进行一些计算并返回结果。我需要的是随机延迟 1-5 秒的动作响应。我对 Akka 的经验很少,但我不知道如何完成我需要的工作。
示例控制器:
package controllers
import scala.util.Random
import play.api._
import play.api.mvc._
import models.MyModel
object Application extends Controller {
def calculate = Action { implicit request =>
val result = MyModel.calculate()
val delay = Random.nextInt(6)
//This response must be delayed somehow
Ok(result)
}
}
示例模型:
package models
object MyModel {
def calculate = {
//calculation happens here
}
}
更新 - 解决方案 senia 的回答有效,但带有弃用警告。此代码与 Play 2.2.1 一致:
import play.api.libs.concurrent.Promise
import play.api.libs.concurrent.Execution.Implicits.defaultContext
def calculate = Action.async {
val result = MyModel.calculate()
val delay = Random.nextInt(6)
val delayed = Promise.timeout(result, delay.second)
delayed.map(Ok(_))
}
【问题讨论】:
标签: scala concurrency playframework playframework-2.0