我试图用于理解来执行系列期货列表.一个未来的输出成为下一个未来的输入.下面是示例代码.
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.我想使上面的代码更通用,其中插件中的插件数量是动态的.我该如何实现它.
plugins.foldLeft(Future.successful(input)) { (resultFuture, plugin) => resultFuture.flatMap(plugin.execute(_)) }
这里使用了两种工具:foldLeft
和flatMap
看看这些链接,看看你是否理解这些功能的作用
Future.successful
只需将输入包装到Future中,这样我们就可以像处理所有其他中间结果一样对待它.下划线是lambda函数参数的快捷方式.写这篇文章的另一种方法是:resultFuture.flatMap { result => plugin.execute(result) }
.