繁体   English   中英

是否可以在地图内部重构地图内部的地图

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM