Допустим, у меня есть итератор:
val nextElemIter: Iterator[Future[Int]] = Iterator.continually(...)
И я хочу создать исходный код из этого итератора:
val source: Source[Future[Int], NotUsed] =
Source.fromIterator(() => nextElemIter)
Итак, теперь мой источник выдает Future
s. Я никогда не видел, чтобы фьючерсы передавались между этапами в документации Akka или где-либо еще, поэтому вместо этого я всегда мог сделать что-то вроде этого:
val source: Source[Int, NotUsed] =
Source.fromIterator(() => nextElemIter).mapAsync(1)(identity /* was n => n */)
А теперь у меня есть штатный источник, который выдает T
вместо Future[T]
. Но это кажется хакерским и неправильным.
Как правильно поступать в таких ситуациях?
mapAsync
здесь прекрасно. Ведь он предназначен как раз для этого - расплющивать фьючерсы в потоки. - person Vladimir Matveev   schedule 28.09.2016mapAsync(1)(identity)
- правильный способ сделать это. - person expert   schedule 28.09.2016mapAsync
был больше для фьючерсов, которые создаются внутри этапа, а не приходят уже как будущее из извне . Хотя я могу ошибаться. Просто кажется странным, что нетSource
конструктора, который сам сглаживает фьючерсы - person Ori Popowski   schedule 29.09.2016