从具有多个案例语句的方法定义返回值


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转换的链。一般规则是从不阻止服务线程。

最新更新