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

时间:2018-02-14 14:11:10

标签: scala playframework

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.
        }
     }

如何从cookie.value.get方法返回authenticateUser

1 个答案:

答案 0 :(得分:0)

首先,您似乎有许多 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) }

我不知道Play的细节,所以,考虑Request/Response东西“伪代码”,但基本的想法是你的整个处理应该是Future转换的链。一般规则是从不阻止服务线程。