Hãy nói rằng tôi có một số iterator:Làm thế nào để đối phó với nguồn phát ra Tương lai [T]?
val nextElemIter: Iterator[Future[Int]] = Iterator.continually(...)
Và tôi muốn xây dựng một nguồn tin từ iterator rằng:
val source: Source[Future[Int], NotUsed] =
Source.fromIterator(() => nextElemIter)
Bây giờ nguồn của tôi phát ra Future
s. Tôi chưa bao giờ thấy tương lai được thông qua giữa các giai đoạn trong tài liệu Akka hay bất cứ nơi nào khác, vì vậy thay vào đó, tôi có thể luôn luôn làm một cái gì đó như thế này:
val source: Source[Int, NotUsed] =
Source.fromIterator(() => nextElemIter).mapAsync(1)(identity /* was n => n */)
Và bây giờ tôi có một nguồn thường xuyên phát ra T
thay vì Future[T]
. Nhưng điều này cảm thấy bị hack và sai.
Cách thích hợp để giải quyết các tình huống như vậy là gì?
Tôi nghĩ rằng 'mapAsync' là hoàn toàn tốt đẹp ở đây. Sau khi tất cả, nó được dự định chính xác cho mục đích này - làm phẳng tương lai vào suối. –
'mapAsync (1) (nhận dạng)' là cách thích hợp để thực hiện nó. – expert
@expert đã được chỉnh sửa. –