如何在Play框架和scala中进行内部同步发布请求?

时间:2016-01-20 12:56:39

标签: scala post playframework

我是Play和Scala的新手。我正在尝试使用Play和Scala构建应用程序。我需要在内部进行post调用以从我的服务器获取数据。但这应该是同步的。从此帖子请求中获取数据后,我需要将该数据发送到前端。我见过很多资源,但都是异步的。请帮帮我。

我从 DB 获取数据,然后应该将数据作为响应返回。

数据库位于远程服务器而非托管服务器中。

2 个答案:

答案 0 :(得分:2)

我认为你不应该阻止。

def action = Action.async {
  WS.url("some url")
    .post(Json.toJson(Map("query"->query)))
    .map { response => 
      val jsonResponse = response.json
      // in this place you have your response from your call
      // now just do whatever you need to do with it,
      // in this example I will return it as `Ok` result
      Ok(jsonResponse)
    }
}

只需映射您的通话结果,然后将其修改为Future,并使用Action.async的{​​{1}}。

如果您真的想阻止使用Future,请导入

Await.result(future, 5 seconds)

See docs for Await here

答案 1 :(得分:0)

所有请求都是异步的,但没有任何内容阻止您等待代码中的await响应。

val response = await(yourFutureRequest).body

上面写的这一行将会阻止,直到将来结束。