scala - 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
在列表中的每个字母表上执行最内层?
解决方案
考虑 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]]
.
推荐阅读
- python - Python for循环修改DataFrame
- loops - 用哈巴狗迭代
- c# - htmlagilitypack 问题解析链接列表
- ios - 将 stackView 提升到键盘上方
- react-native - 如何解决 React 原生版本不匹配错误
- java - Java:发送请求的正文为“NULL”
- google-maps - 有没有办法在不影响 URL 的情况下更新地图?
- google-cloud-platform - 如何通过 CLI 获取 Google Cloud SQL 实例的 IP
- python - Python-sphinx:启用“autodoc_mock_imports”时不会显示子类的文档
- typescript - 如何将变量从一种类型转换为另一种类型?