2016-07-04 10 views
0

Wie mache ich ein Verständnis (oder Flatmaps), die Futures und Non-Futures mischen, um eine Future-Liste der Ergebnisse zurückzugeben? Ein Beispiel:Ein For-Comprehension mit gemischten Typen und WS-Aufrufen

private def fetchWSResponseBodies(futureSetLongs: Future[Set[Long]]): Future[List[String]] = { 
    for { 
     setLongs: Set[Long] <- futureSetLongs 
     long: Long <- setLongs // Mulitple longs 
     wsRespone: Future[WSResponse] <- ws.url(s"someURL/$long").get 
    } yield { 
     wsRespone.body 
    } 
    } 

Ich habe schwer, herauszufinden, wie diese Logik in Extrapolation nicht blockierenden Code flatmaps/Karten oder irgendetwas anderes verwenden. Hilfe geschätzt!

+3

Um von 'Liste [Zukunft [T]]' auf 'Zukunft [Liste [T]]' 'verwenden Future.sequence (/ * for-comp * /) '. – jwvh

+0

Was ist WS? Erhalten Sie einen Kompilierungsfehler von dem Code, den Sie hier haben? – marios

+0

Ich denke, WS ist die Play WS API – mfirry

Antwort

0

Dies sollte kompilieren, aber macht Handhabung keine Störungen:

private def fetchWSResponseBodies(futureSetLongs: Future[Set[Long]]): 
    Future[List[String]] = 
    futureSetLongs.flatMap { ids => 
    Future.sequence(ids.map { id => 
     ws.url(s"someURL/$id").get().map(_.body) 
    }.toList) 
    } 
Verwandte Themen