代码之家  ›  专栏  ›  技术社区  ›  Ashwin

AKKA源不流数据?

  •  0
  • Ashwin  · 技术社区  · 5 年前
    val pageDataFutures : Seq[Future[PageData]]= ??? //4 api calls each resulting in a future of PageData
    
      def source : Source[PageData, NotUsed] = Source(
        pageDataFutures.flatMap(future => Await.result(future,atMost)).toList
      )
    
      source.runForeach(println)
    

    我期望消息源运行 'runForEach' 当每一个未来都完成时。但是,所有的4个API调用都被发出,然后源代码中的数据都被一次打印出来。它不应该将数据打印为可用的吗?我正在使用 Await 为每个未来。所以可以保证在下一个未来 Awaited 上一个未来的结果可用,并且可以由println使用。

    1 回复  |  直到 5 年前
        1
  •  1
  •   Jeffrey Chung    5 年前

    使用 mapAsync :

    将传入元素传递给返回 Future 结果。当 未来 到达后,结果被传递到下游。高达 n 元素可以同时处理,但不管它们的完成时间如何,结果完成时将保留传入的订单。

    val pageDataFutures: Seq[Future[PageData]] = ???
    
    Source(pageDataFutures)
      .mapAsync(parallelism = 1)(x => x) // or: mapAsync(parallelism = 1)(identity)
      .runForeach(println)