Я использую Slick 3.0, и следующие мои коды:В Slick 3.0, как упростить вложенный `db.run`?
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
осуществить это ..
Кто-нибудь есть идеи о том, как реорганизовать это?
Вы должны комбинировать запросы, а затем только в качестве последнего шага выполнить композицию на db. Вот как я думаю, он должен работать. Если вы добавите еще какой-нибудь код, чтобы сделать runnable-пример, я мог бы дать ему попробовать с ответом. –
@ pagoda_5b Спасибо! Но как объединить два запроса, если второй запрос зависит от результата первого запроса? Я думаю, что 'andThen' здесь не подходит. –
@hanfeisun Вы, вероятно, должны использовать для понимания, но я не могу помочь вам, если вы не можете предоставить какой-то самосогласованный код для тестирования. Я могу только догадываться о намерении и результате вашего кода, если вы не более явны. :) –