2
我有一個簡單的Play應用程序,其中一個控制器動作調用模型方法,它執行一些計算並返回結果。我需要的是動作響應在1-5秒之間隨機延遲。我對阿卡沒有什麼經驗,但我不知道如何完成我所需要的。Scala/Play/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
}
}
更新 - 解塞尼亞的回答是工作,但棄用警告。此代碼同意播放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(_))
}
謝謝,這工作得很好。一個注意雖然 - 我收到一個警告'方法異性結果不推薦使用:使用Action.async來建立異步操作。我會看看現在是否可以解決這個問題,我有一個更清晰的想法。 – Caballero
@Caballero:查看更新 – senia