【发布时间】:2017-01-12 17:28:56
【问题描述】:
我是 Scala 和 Play 2.0 的新手,所以这可能是一个非常简单的问题。我有以下代码(为简洁起见伪编码):
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,因为它是阻塞的。
【问题讨论】:
-
使用
Action.async代替Action并删除Await.result -
如何显示错误页面?我有这样的东西:
Ok(views.html.error..),当我使用Action.async时它给了我语法错误@ -
Future(Ok(views.html.error..))使用这个。因为您的操作的返回类型现在是Future[Result]
标签: scala playframework