当我第一次使用 Play 2 进行开发时,我发现我在我的控制器中做了很多这样的事情(其中一个更简单的例子):
val promUser = Akka.future(UserService.findByUsername(access.username))
Async(
promUser.map {
_.map{
user => {
val promService = Akka.future(ServiceService loadOnlyWithUser (id,user.id.get))
Async(
promService.map { _.map { service =>
Ok(toJson(service))
}.getOrElse(BadRequest("not accessible"))}
)
}
}.getOrElse {
BadRequest("unauthorised")
}
}
)
有一个单一的未来会更好吗?例如:
val promService = Akka.future{
val userOption = UserService.findByUsername(access.username)
userOption.map( user => {
ServiceService loadOnlyWithDeveloper (id,user.id.get)
}).getOrElse(None)
}
Async(
promService.map { _.map { service =>
Ok(toJson(service))
}.getOrElse(BadRequest("unauthorised"))}
)
我在想,一方面,控制器的许多期货/回报可能会增加开销,另一方面,将调用分组到一个未来将更具可读性,但会导致在 Akka 系统中运行更大的“线程”。对于更大的工作,我有一个额外的 Akka 系统,所以这些可能最多只包含 4 个 SQL 事务。就我可以从 apache bench 中解决的问题而言,上面的示例之间没有任何区别......我有什么遗漏吗?