如何优雅地从数据库初始化 Scala 服务?
How to elegantly initialize a Scala service from a database?
我已经离开 Scala 有一段时间了,所以我正在努力回到习语中。我有三个数据库调用:
db.getInventory(inventoryId: UUID): Future[Option[Inventory]]
db.getInventoryFields(inventoryId: UUID): Future[Seq[InventoryField]]
db.allInputs: Future[Seq[Input]]
如果 db.getInventory
是 Some(inventory)
,我想通过给它一个
来初始化我的服务
CacheContext(inventory: Inventory, fields: Seq[InventoryField], inputs: Seq[Input])
但是如果是None,我想报错,return。
在这里使用 for
/map
/flatMap
/fold
等的最佳组合是什么?
这将 return 一个 Future[Option[CacheContext]]
。
for {
optInv <- db.getInventory(theUuid)
invFlds <- db.getInventoryFields(theUuid)
inputs <- db.allInputs
} yield optInv.map(CacheContext(_,invFlds,inputs))
解包 Future
(即等待)应该在代码的后面完成(如果有的话),此时您可以 .fold()
覆盖 Option
并报告错误.
我已经离开 Scala 有一段时间了,所以我正在努力回到习语中。我有三个数据库调用:
db.getInventory(inventoryId: UUID): Future[Option[Inventory]]
db.getInventoryFields(inventoryId: UUID): Future[Seq[InventoryField]]
db.allInputs: Future[Seq[Input]]
如果 db.getInventory
是 Some(inventory)
,我想通过给它一个
CacheContext(inventory: Inventory, fields: Seq[InventoryField], inputs: Seq[Input])
但是如果是None,我想报错,return。
在这里使用 for
/map
/flatMap
/fold
等的最佳组合是什么?
这将 return 一个 Future[Option[CacheContext]]
。
for {
optInv <- db.getInventory(theUuid)
invFlds <- db.getInventoryFields(theUuid)
inputs <- db.allInputs
} yield optInv.map(CacheContext(_,invFlds,inputs))
解包 Future
(即等待)应该在代码的后面完成(如果有的话),此时您可以 .fold()
覆盖 Option
并报告错误.