def resolve(url: String): Future[WSResponse] = ws.url(url).withFollowRedirects(true).get()
def validateAllLinks(links: List[String]) = ???
Wie würden Sie die zweite Funktion lösen?Wie kann ich eine Liste von http-URLs gleichzeitig mit ScalaWS auflösen (Play!)?
ich Traverse versucht habe, Future.sequence, Await ...
Dies war mein letzter Versuch:
def validateAllLinks(links: List[String]) = links.map(link =>
Await.result(resolve(link), Duration.create(3, TimeUnit.SECONDS))
)
Das Problem bei diesem Ansatz:
i erhalten TimeoutExceptions und MaxRedirectException, die ich nicht versuchen/fangen möchte
Ich glaube nicht, dass die Lösung gleichzeitig wäre, auch wenn sie funktioniert.
Vielen Dank im Voraus!
Richtig, aber es gibt ein Problem bei diesem Ansatz, dass es nicht der Fall ist erlauben Zeitüberschreitungen und Fehler für einzelne Anfragen zu behandeln. Wahrscheinlich dieser Link: https://stackoverflow.com/questions/17466889/run-multiple-futures-in-parallel-return-default-value-on-timeout hilft. – igorpcholkin
Richtig, meine Lösung war, es gleichzeitig zu machen. Um die Zeitüberschreitungen zu behandeln, sollte 'ws.url (url) .withRequestTimeout (timeout) 'in der resolve-Methode verwendet werden. Und "resolve (..). Map (..). Recovery (..)" sollte verwendet werden, um zu verstehen, welche fehlschlagen und welche erfolgreich sind. – Feyyaz