Je suis en train de diffuser Futures comme Html (en jeu à Scala 2.5.2) avec l'idée étant qu'ils rendent à l'écran lorsque le Futures complet. Donc, je diffuser un Source comme chaîne comme ceci:flux Html au navigateur lorsque Future termine
def oneFuture = Action { request =>
val source1: Source[String, NotUsed] = fromFuture(sc.makeServiceCall("async1"))
Ok.chunked(source1)
}
où sc.makeServiceCall
appels:
class ServiceClient @Inject() (ws: WSClient) {
def makeServiceCall(serviceName: String): Future[String] = {
ws.url(s"http://localhost:9000/mock/$serviceName").get().map(_.body)
}
}
qui fait référence:
class Mock @Inject() (actorSystem: ActorSystem)(implicit exec: ExecutionContext) extends Controller {
def mock(serviceName: String) = Action.async { request =>
serviceName match {
case "async1" => respond("asy1", 1.second)
case "async2" => respond("asy2", 3.second)
}
}
private def respond(data: String, delay: FiniteDuration): Future[Result] = {
val promise: Promise[Result] = Promise[Result]()
actorSystem.scheduler.scheduleOnce(delay) { promise.success(Ok(data)) }
promise.future
}
}
qui retourne asy1
après 1 seconde. Donc, dans cet esprit comment je devrais rendre Html dans le navigateur si je voulais diffuser une page de modèle, par exemple. views.html.async1.async1Message("a simple string")
- qui est:
@(async1Message: String)
<span style="color: red; font-size: 22px; font-weight: bold;">@async1Message</span>
Qu'avez-vous encore essayé? Avez-vous mappé le résultat de l'appel de service dans le modèle, puis l'avez renvoyé? Cela semble être plus d'une question frontend, comment gérez-vous la réponse en javascript, non? Comment l'extrémité est-elle appelée? – thwiegan