play-scala アプリケーションで、WS 呼び出しを行っています。
def getaddresses : ListBuffer[String] = {
var lb = new ListBuffer[String]()
var url = "xyz@xyx.com/someapi"
WS.url(url).get.map {
response =>
var emailsSeq = (response.json \\ "email")
emailsSeq.foreach(lb+=_.toString())
lb.foreach(println) //This is filled with values
}
lb.foreach(println) //This is empty
lb
}
マップ内では、このメソッドによって返される ListBuffer lb に入れたエントリのシーケンスが返されます。問題は、ListBuffer が map{} 内の値を表示するが、その外側には表示されないことです。その結果、空の ListBuffer がメソッドから渡されます。
ws 応答に遅延があるのではないかと考えたので、次のことを試してみましたが、利点はありませんでした。
WS.url(url).withRequestTimeout(10.seconds).get.map {
いっぱいになったリストバッファが返されるのを手伝ってください