我正在尝试构建一个服务,从另一个Web服务中获取一些页面并处理内容并将结果返回给用户。我正在使用Play 2.2.3 Scala。
val aas = WS.url("http://localhost/").withRequestTimeout(1000).withQueryString(("mid", mid), ("t", txt)).get
val result = aas.map {
response =>
(response.json \ "status").asOpt[Int].map {
st => status = st
}
(response.json \ "msg").asOpt[String].map {
txt => msg = txt
}
}
val rs1 = Await.result(result, 5 seconds)
if (rs1.isDefined) {
Ok("good")
}
问题是即使WS请求需要100 ms,服务也会等待5秒钟才能返回“good”。我也无法将Await时间设置为100ms,因为我请求的其他Web服务可能需要100ms到1秒才能响应。
我的问题是:有没有办法在准备好后立即处理和提供结果,而不是等待一段固定的时间?
答案 0 :(得分:4)
@wingedsubmariner已经提供了答案。由于没有代码示例,我将发布它应该是什么:
def wb = Action.async{ request =>
val aas = WS.url("http://localhost/").withRequestTimeout(1000).get
aas.map(response =>{
Ok("responded")
})
}
现在您不需要等到WS响应然后决定要做什么。你可以告诉游戏在做出回应时做些什么。