Async controller
----------------------------
package beard.controllers
import play.api.mvc._
import play.api.libs.json._
import play.api.libs.functional.syntax._
import play.libs.Json._
import reactivemongo.bson._
import service.BeardService
import play.api.libs.concurrent.Execution.Implicits.defaultContext
import scala.collection.mutable
import scala.collection.mutable.ListBuffer
import scala.concurrent.Future
import scala.util.{Failure, Success, Random}
class AsyncBeardController extends Controller {
def sayAsyncBeard = Action.async { request =>
val futureResult = Future {
intensiveComputation()
}
futureResult.map(result =>
Ok(result)
)
}
def intensiveComputation(): JsObject = {
Thread.sleep(Random.nextInt(5000))
Json.obj("value" -> "beard")
}
}
Test
-------
$ curl -XGET http://localhost:9000/sayAsyncBeard
{"value":"beard"}
You will get the response after ~5seconds.