理解动态期货清单:Scala

时间:2015-12-31 01:22:37

标签: scala for-comprehension concurrent.futures

我正在尝试使用理解来执行系列期货列表。一个未来的输出成为下一个未来的输入。以下是示例代码。

for {
      x <- plugins(0).execute(input)
      y <- plugins(1).execute(x)
      z <- plugins(2).excute(y)
    } yield z

上面的代码更像是瀑布,每个插件(i)在某些输入上执行,并将输出传递给下一个插件。最后一个插件的输出是最终输出。 plugins是一个Seq of Plugin对象。 execute方法返回Future。我想使上面的代码更通用,其中插件中的插件数量是动态的。我该如何实施呢。

1 个答案:

答案 0 :(得分:5)

plugins.foldLeft(Future.successful(input)) { (resultFuture, plugin) =>     
  resultFuture.flatMap(plugin.execute(_))
}

此处使用了两种工具:foldLeftflatMap

看看这些链接,看看你是否了解这些功能

Future.successful只是将输入包装到Future中,因此我们可以像处理所有其他中间结果一样对待它。下划线是lambda函数参数的快捷方式。写这篇文章的另一种方式是:resultFuture.flatMap { result => plugin.execute(result) }

相关问题