Akka,链接 Futures

Akka, chaining Futures

我有三种 return 未来的方法,我如何正确地链接它们,以便第一个的输出传递给第二个,第二个的 return 传递给第三个,最后将它们全部发送以上数据为最终未来。我不确定这是解决此问题的正确方法。

Source
  .fromFuture(someFuture)
  .mapAsync(1)(modelData => queryModelData(modelQuery))
  .mapAsync(1)(modelId => findModelId(modelData))
  .mapAsync(1)(jobData => queryJobData(jobQuery))
  .mapAsync(1)(status => setModelStatus(modelData,modelId,jobData))

您可以使用 .flatMap(或 for-comprehension 来顺序链接多个 Future,后者是相同的语法糖)。

例如

  Source
    .fromFuture(someFuture)
    .mapAsync(1){ data =>
       for { 
         modelData <- queryModelData(data)
         modelId <- findModelId(modelData)
         jobData <- queryJobData(modelId)
         status <- setModelStatus(modelData, modelId, jobData)
       } yield status
    }