Powiedzmy mam trochę iterator:Jak radzić sobie ze źródłem, które emituje przyszłość [T]?
val nextElemIter: Iterator[Future[Int]] = Iterator.continually(...)
I chcę zbudować źródło z tego iteratora:
val source: Source[Future[Int], NotUsed] =
Source.fromIterator(() => nextElemIter)
Więc teraz moje źródło emituje Future
s. Nigdy nie widziałem kontrakty były przekazywane pomiędzy etapami w docs Akka lub gdziekolwiek indziej, więc zamiast tego zawsze można zrobić coś takiego:
val source: Source[Int, NotUsed] =
Source.fromIterator(() => nextElemIter).mapAsync(1)(identity /* was n => n */)
A teraz mam stałe źródło emitujące T
zamiast Future[T]
. Ale to jest czcze i złe.
Jaki jest właściwy sposób radzenia sobie z takimi sytuacjami?
myślę, że 'mapAsync' jest tutaj idealnie w porządku. W końcu jest to dokładnie przeznaczone do tego celu - spłaszczanie przyszłości w strumieniach. –
'mapAsync (1) (tożsamość)' jest właściwym sposobem robienia tego. – expert
@expert edytowane. –