我的服务层是returning。我现在有一个乱七八糟的东西:
userService.getAll().map { users =>
for(u <- users) {
groupService.getByUserId(u.id).map {
blockingService.call(u)
otherService.bar(u.id).map {
lastService.foo(u.id)
}
}
}
}我能以某种方式把它清理干净吗?它有太多的内嵌map调用。
我还担心,如果将来我重构我的代码,使得blockingService.call因为基于未来而导致,我的代码可能会有意想不到的问题,所以更好地将其视为未来?
发布于 2015-12-17 12:15:59
将嵌套的map替换为a以进行理解:
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 resultshttps://stackoverflow.com/questions/34326401
复制相似问题