val value = authenticateUser
private def authenticateUser = {
val holder = WS.url(platformUrl + "/userApi/auth/login?username=testuser&password=testPass")
val res = holder.post(Results.EmptyContent()).onComplete {
case Success(response) => response.cookies.map{cookie => println(cookie.value.get)}
case Failure(errors) => println("")
// The `Future` failed.
}
}
如何从authenticateUser
方法返回cookie.value.get
?
首先,您似乎有许多 cookie,所以尚不清楚,的价值您想返回哪个。
更重要的是,您实际上不应返回值本身。这个想法是返回Future
,可以进一步转化下游:
def authenticateUser = WS.url(..)
.post(Results.EmptyContent)
.map { _.cookies }
.map { _.find(_.name == "Auth").flatMap(_.value).getOrElse("") }
现在,下游的某个地方,您可以拥有类似的东西:
def serve(request: Request): Future[Response] = authenticateUser
.map { user =>
serveRequest(user, request)
}.map { result => makeResponse(result) }
我不知道游戏的细节,因此请考虑Request/Response
内容"伪代码",但基本思想是您的整个处理应该是Future
转换的链。一般规则是从不阻止服务线程。