W jaki sposób Scala Futures łączy się z flatMap?
Pracuję nad wykorzystaniem Futures po raz pierwszy w Scali i pracuję nad przykładem użycia kombinatora flatMap; Obserwowałem tę dyskusję:
http://docs.scala-lang.org/overviews/core/futures.html
W szczególności ten przykład:
val usdQuote = future { connection.getCurrentValue(USD) }
val chfQuote = future { connection.getCurrentValue(CHF) }
val purchase = for {
usd <- usdQuote
chf <- chfQuote
if isProfitable(usd, chf)
} yield connection.buy(amount, chf)
purchase onSuccess {
case _ => println("Purchased " + amount + " CHF")
}
jest tłumaczone na to:
val purchase = usdQuote flatMap {
usd =>
chfQuote
.withFilter(chf => isProfitable(usd, chf))
.map(chf => connection.buy(amount, chf))
}
Mam trochę kłopotów z uchwyceniem tego, jak i kiedy jest wykonywana flatMap?
Rozumiem, że usdQuote i chfQuote są wykonywane przez „jakiś wątek” w „jakiś czas”, a ich zarejestrowane funkcje wywołania zwrotnego zwane są pytaniami:
a) Czy aplikacje usdQuote i chfQuote są wykonywane jednocześnie? (Jestem pewien, że są).
b) W jaki sposób flatMap przypisuje wartość Future useQuote to usd? Podobnie jak w przypadku, czy jest wywoływane, gdy kończy się operacja usdQuote?
c) Jaki wątek wykonuje operację „flatMap” i „map” (prawdopodobnie więcej kontynuacji od ostatniego pytania).
Twoje zdrowie.