我离开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,我想报告并返回错误。
在这里使用for
/ map
/ flatMap
/ fold
等的最佳组合是什么?
答案 0 :(得分:2)
这将返回std::shared_ptr
。
Future[Option[CacheContext]]
for {
optInv <- db.getInventory(theUuid)
invFlds <- db.getInventoryFields(theUuid)
inputs <- db.allInputs
} yield optInv.map(CacheContext(_,invFlds,inputs))
的解压缩(即等待)应该在代码的后面(如果有的话)完成,此时,您可以在Future
上.fold()
并报告错误。 / p>