首页 > 解决方案 > Scala - 如何在不返回未来未来的情况下编写嵌套的理解?

问题描述

我正在尝试执行以下操作:

for {
    item <- createAnItem //createAnItem returns Future[Item]
        for (alphabet <- listOfAlphapbets) {
            for {
                a <- enterAlphabetsWithItem(alphabet.id, item.id) // enterAlphabetsWithItem returns a Future[NewAlphabets]
             } yield a
        }
} yield item

问题出在我内心最深处的for理解之内,我得到了不希望的未来或未来。有没有办法重构这个,这样我就不会得到期货的未来,但能够for在列表中的每个字母表上执行最内层?

标签: scala

解决方案


考虑 createItem 返回 Future[Item]

考虑 listOfAlphabets 返回 List[String]

enterAlphabetsWithItem 返回 Future[String]

那么简单的解决方案是

Future[String] resultFuture = createItem(input).flatMap(item => Future.sequence(listOfAlphabets.map(alphabet => enterAlphabetsWithItem(item, alphabet))))

Future.sequence转换List[Future[X]]Future[List[X]].


推荐阅读