首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Scala play框架中处理发出外部URL调用的正确方法

在Scala play框架中处理发出外部URL调用的正确方法
EN

Stack Overflow用户
提问于 2017-01-12 03:27:11
回答 1查看 456关注 0票数 0

我是Scala和Play 2.0的新手,所以这可能是一个非常简单的问题。我有以下代码(为了简明起见,我做了伪代码):

代码语言:javascript
运行
复制
var someExternalUrl = ...
def oauth = Action { request =>
    val paramMap = request.queryString.map { case (k, v) => k -> v.mkString }
    if (paramMap.contains("error")) {
      // Redirect to error page
    } else {
      val d2 = Duration(1000, "millis")
      val futureResponse = ws.url(someExternalUrl).withQueryString(...).toString).get()

      var m = futureResponse.map(response => {
        val json = response.json

        val userId: String = (json \ "user_id").as[String]
        Redirect(routes.Application.home()).withSession(
        "user_id" -> userId
        )
      })
      Await.result(m, d2)
    }

}

这是处理外部URl调用结果的正确方式吗?我见过一些帖子说使用onComplete来处理期货,而不是使用Await,因为它是阻塞的。

EN

回答 1

Stack Overflow用户

发布于 2017-01-12 04:39:50

正如@ provides评论的那样,Play为这种情况提供了Action.async。有关文档的更多信息,请访问:https://www.playframework.com/documentation/2.5.x/ScalaAsync#Returning-futures

做一个Await (几乎?)从来都不是一个好的解决方案

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41599145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档