[英]Is it possible to refactor a map inside of a map inside of a map
我的服务层正在返回期货。 我现在有这个烂摊子:
userService.getAll().map { users =>
for(u <- users) {
groupService.getByUserId(u.id).map {
blockingService.call(u)
otherService.bar(u.id).map {
lastService.foo(u.id)
}
}
}
}
我可以以某种方式清理吗? 它有太多嵌入式地图调用。
我也很害怕,如果将来我重构代码,使之基于基于Future的blockingService.call成为可能,则我的代码可能会出现意料之外的问题,那么最好将其视为Future?
用代替嵌套的map
进行理解:
def doSomethingWithUser(u: User) = {
for {
_ <- groupService.getByUserId(u.id)
_ <- Future(blockingService.call(u)) // Notice Future.apply here.
_ <- otherService.bar(u.id)
result <- lastService.foo(u.id)
} yield result
}
for {
users <- userService.getAll()
results <- Future.traverse(users)(doSomethingWithUser) // Notice Future.traverse here.
} yield results
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.