In einer Play-scala Anwendung, Im einen WS Anruf:Benötigen Liste außerhalb der Karte in api Anruf spielt ws
def getaddresses : ListBuffer[String] = {
var lb = new ListBuffer[String]()
var url = "[email protected]/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
}
Innen Karte eine Sequenz zurückgegeben, deren Einträge ich in einem ListBuffer lb gestellt von zurückgegeben werden diese Methode. Das Problem ist, dass der ListBuffer Werte in der Karte {} zeigt, aber nicht außerhalb zeigt. Als Ergebnis wird ein leerer ListBuffer von der Methode übergeben.
ich dachte, es könnte eine Verzögerung in ws Antwort sein versucht, so die folgenden, die keinen Vorteil hatte:
WS.url(url).withRequestTimeout(10.seconds).get.map {
Bitte helfen Sie mir gefüllt Listenpuffer immer
danke für Ihre Antwort. lb.foreach (println) wird im Kartenblock gedruckt. Also denke ich, dass der Anruf nicht verzögert wird, aber wie bekomme ich diesen Wert außerhalb des Kartenblocks, um ihn an den Anrufer von getaddress weiterzuleiten. – surm
Wie gesagt, Sie können versuchen, Zukunft zum Beispiel zu verwenden. Sehen Sie sich http://alvinalexander.com/scala/future-example-scala-cookbook-oncomplete-callback an oder versuchen Sie diesen einfachen Code, den ich meiner Antwort hinzufüge. –