播放框架 - 使用 WS API
Posted
技术标签:
【中文标题】播放框架 - 使用 WS API【英文标题】:Play framework - Using WS API 【发布时间】:2014-08-28 09:59:15 【问题描述】:我必须从我的 Scala Play 框架应用程序调用外部 REST 服务。使用 WS API,我得到了一个 Future,但不确定哪个是从这个 Future 中“提取”价值的最佳方式。这是我的代码:
val externalRestServiceCall: Future[List[Data]] = WS.clientUrl(dataSourceProperties.url).get().map
response => response.json.as[List[Data]]
这是我目前的方法,虽然返回一个 Future:
val timeoutFuture = play.api.libs.concurrent.Promise.timeout("Oops", 1 second)
Future.firstCompletedOf(Seq(externalRestServiceCall, timeoutFuture)).map
case first: List[Data] => Some(first)
case _ => None
【问题讨论】:
【参考方案1】:在我看来,最好不要考虑“提取”未来。
如果您正在进行操作,只需使用Action.async(theWsFuture.map(wsRes => aPlayResult))
。
您还可以在.async(...)
中将“非未来”结果与该未来混合:
def myAction = Action async
for
a <- Future.successful(syncVal)
b <- myFuture
yield Ok(somethingWithAB)
在Play: How to implement action composition 上查看带有未来的动作组合。
【讨论】:
非常有用的回复,我听从了您的建议,并使用 Action.async 包装了我的操作。以上是关于播放框架 - 使用 WS API的主要内容,如果未能解决你的问题,请参考以下文章
播放框架 SBT 导入 play.api.libs.streams
播放框架 - 保证本地线程在请求结束或下一个请求开始时被清除
Youtube API如何在视频结束时从0秒开始播放视频?框架,Javascript
播放框架错误:类型不匹配 - 发现 scala.concurrent.Future[play.api.mvc.Result] required: play.api.mvc.Result