我有一个返回
Future[State]
的函数,另一个我需要返回 StateSimplified
对象的函数
//class State
case class State(id: String, label: String, postalCode: String, extension: Long...)
//class StateSimplified
case class StateSimplified(id: String, label: String)
现在我有这个功能了
def getSimple(relationId: Int): Future[StateSimplified] = {
repository.findStateByRelationId(relationId).map(state =>
StateSimplified(id = state.id, label = state.label))
}
repository.findStateByRelationId(relationId: Int)
是一个从相关表中查找状态的函数,该函数返回一个Future[State]
问题是我需要一个 StateSimplified
而不是 Future[StateSimplified]
因为 StateSimplified 我需要将它放在另一个类中
case class City(id: Int, name: String, population: Long,..., state: StateSimplified)
如何将结果从
repository.findStateByRelationId(relationId: Int)
映射到 StateSimplified
而不是 Future[StateSimplified]
编辑: 在这个建议的问题中,标题是如何等待Future,但作为解决方案的答案标记表明该函数返回一个Future,并且不想在我的函数中返回Future,因为稍后该对象将进入另一个不同的
City
有一个名为 state
的属性,其类型为 StateSimplified
正如评论中所说,当你得到
Future
时,你有 2 个选择:
map
、flatMap
或其他操作。所有这一切都是非阻塞。大多数时候,您想要执行 (1) 直到应用程序的主类。在任何像样的 Web 框架中,您甚至不需要 (2),框架会为您处理。
回到你的案例,这意味着你应该这样做:
val futureCity: Future[City] = getSimple(...).map { stateSimplified =>
// Build or set in a City
City(...)
}
// Then work with the Future[City] rather than the City directly using map or flatMap...