2017-10-07 3 views
0

Ich habe Liste der IP-Adressen wie dieseEine Liste erwarten [Zukunft], was ist, wenn es eine gescheiterte Zukunft gibt?

val ips = List("ip1", "ip2", "ip3") 

verwende ich diese Liste http get-Anfragen über meinen Wrapper zu tun Methode bekommen, und mein Wrapper erhält Methode BadRequestException, wenn der Antwortstatus 400 ist werfen. Ich verstehe, wenn ich viel Erfolg zu bekommen sagen 200 seit myWrapper Future[WSResponse] zurückkehrt, in guten Fall mein Endergebnis List[Future[WSResponse]]

Beispiel Snippet wird

def myresponses(ips:List[String]) = { 
    ips.map(ip=>myWrapper(ip)) 
} 

Meine Verwirrung und Frage ist, dass seit myWrapper eine Ausnahme für den Fall werfen von Status 404, werden andere Jungs noch ausführen? Kurz gesagt in einem schlechten Fall sagen, wo eine Anfrage gibt 404 und sagen, die restlichen geben alle 200, wird es der Fall sein, dass ich List[WSResponse] haben werde und für eines der Elemente wird es eine Ausnahme sein? Oder es wird nicht der Fall sein und wenn eine Zukunft fehlgeschlagen ist, werden die anderen vielleicht nicht einmal ausgeführt?

Antwort

0

Sie werden alle ausführen. Wenn es eine Ausnahme gibt, ist dieses Element eine fehlgeschlagene Zukunft. Es wird immer noch die TypFuture[Response] haben, aber wenn Sie versuchen, Await.result darauf, wird eine Ausnahme ausgelöst werden. Wenn Sie versuchen, die Future (map, flatMap usw.) weiter zu transformieren, wird nichts passieren (die Umwandlung wird niemals ausgeführt). Sie können diese Ausnahmen mit .recover oder .recoverWith (sie sind wie .map und flatMap, sondern nur die Transformation berufen, wenn die Zukunft versagt hat) handhaben, oder einen Bericht/aufzuräumen es mit .onFailure (es gibt auch .onSuccess und .onComplete, dass beide Griffe Fälle).

Es ist ein gutes Tutorial mit scala-Futures auf den Umgang hier: https://docs.scala-lang.org/overviews/core/futures.html

Verwandte Themen