兩個未來的異步操作我討厭問 - 我真的,但這個已經讓我的那一刻..組合與輸出在屏幕上
我想創作一些動作(在播放框架 & scala)與我的主要指南是this vid。然而,它是在幾年前取得的,因此一些功能已經被棄用,因此我必須隨時找到解決方法。目前我正在嘗試在某些HTML標記中輸出兩個異步操作。
我成功地輸出一個動作與此控制器:
package controllers
import akka.actor.ActorSystem
import javax.inject._
import play.api.mvc._
import services.ServiceClient
import scala.concurrent.ExecutionContext
@Singleton
class AsyncController @Inject() (sc: ServiceClient)(actorSystem: ActorSystem)(implicit exec: ExecutionContext) extends Controller {
def index = Action.async { request =>
val asy1 = sc.makeServiceCall("async1")
for {
async1Message <- asy1
} yield {
Ok(views.html.async1.async1(async1Message))
}
}
}
在你想知道的sc.makeServiceCall
情況下指的是這個文件:
class ServiceClient @Inject() (ws: WSClient) {
def makeServiceCall(serviceName: String): Future[String] = {
ws.url(s"http://localhost:9000/mock/$serviceName").get().map(_.body)
}
}
所以我也跟着在其指導視頻撰寫兩個與一些HTML的異步操作。這是它變得難以/有趣/鐓:
package controllers
import javax.inject.Inject
import akka.actor.ActorSystem
import play.api.mvc._
import scala.concurrent.{ExecutionContext}
import Ui.Pagelet
class AsyncHomeController @Inject() (as1: AsyncController)(as2: Async2Controller)(actorSystem: ActorSystem)(implicit exec: ExecutionContext) extends Controller {
def index = Action.async { request =>
val asy1 = as1.index(request)
val asy2 = as2.index(request)
for {
async1Result <- asy1
async2Result <- asy2
async1Body <- Pagelet.readBody(async1Result)
async2Body <- Pagelet.readBody(async2Result)
} yield {
Ok(views.html.home2(async1Body, async2Body))
}
}
}
所以Async2Controller
非常相似AsyncController
和Pagelet.readBody
指的是這樣的:
package Ui
import play.api.libs.iteratee.Iteratee
import play.api.mvc.{Codec, Result}
import play.twirl.api.Html
import scala.concurrent._
object Pagelet {
def readBody(result: Result)(implicit codec: Codec): Future[Html] = {
result.body.run(Iteratee.consume()).map(bytes => Html(new String(bytes, codec.charset)))
}
}
,這是其中的錯誤所在 - 那就是:
的成員值運行是不play.api.http.HttpEntity
我無法找到它是否需要注入文檔或任何跡象,因爲它已被棄用。 如果有人得到了這個或解決方法的答案,請泄露。非常感謝
這可能是一個問題與不同的版本。視頻相當古老。 – Zernike
是@Zemike - 這不是一個兼容性問題,但是現在視頻已經有幾年了。這就是我尋找現代替代解決方案的原因。 –