db.getInventory(inventoryId: UUID): Future[Option[Inventory]] db.getInventoryFields(inventoryId: UUID): Future[Seq[InventoryField]] db.allInputs: Future[Seq[Input]]
如果 db.getInventory Some(inventory) ,我想通过给它一个
db.getInventory
Some(inventory)
CacheContext(inventory: Inventory, fields: Seq[InventoryField], inputs: Seq[Input])
但如果没有,我要报告错误并返回。
什么是最好的组合 for map / flatMap / fold
for
map
flatMap
fold
这将返回一个 Future[Option[CacheContext]] .
Future[Option[CacheContext]]
for { optInv <- db.getInventory(theUuid) invFlds <- db.getInventoryFields(theUuid) inputs <- db.allInputs } yield optInv.map(CacheContext(_,invFlds,inputs))
Future (即等待)应该在代码中稍后完成(如果有的话),此时您可以 .fold() Option 并报告错误。
Future
.fold()
Option