【发布时间】:2015-05-12 09:05:06
【问题描述】:
我使用的是 Slick 3.0,以下是我的代码:
def registerMember(newMember: TeamMember): Future[Long] = {
db.run(
teamProfileTable.filter(u => u.ID === newMember.ID).result.headOption
).flatMap {
case None => Future(-1)
case _ => db.run(
(teamProfileTable returning teamProfileTable.map(_.staffID)) += newMember.toTeamRecord
)
}
}
这看起来不错。但是当回调层数较多时,代码可能会变得难以阅读。我尝试使用for-expression 或andThen 来简化代码。但是由于模式匹配部分,我只能使用flatMap 来实现这个..
有人对如何重构这个有想法吗?
【问题讨论】:
-
您应该组合查询,然后仅作为最后一步在数据库上运行组合。这就是我认为它应该工作的方式。如果您添加更多代码来制作可运行的示例,我可以尝试给出答案。
-
@pagoda_5b 谢谢!但是,如果第二个查询取决于第一个查询的结果,如何组合这两个查询呢?我认为
andThen不适合这里.. -
@hanfeisun 您可能应该使用 for comprehensions,但如果您不能提供一些自洽代码进行测试,我将无法进一步帮助您。除非您更明确,否则我可能只会猜测您的代码的意图和结果。 :)