代码之家  ›  专栏  ›  技术社区  ›  Isvara

如何从数据库优雅地初始化Scala服务?

  •  0
  • Isvara  · 技术社区  · 4 年前

    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])
    

    但如果没有,我要报告错误并返回。

    什么是最好的组合 for map / flatMap / fold

    0 回复  |  直到 4 年前
        1
  •  2
  •   jwvh    4 年前

    这将返回一个 Future[Option[CacheContext]] .

    for {
      optInv  <- db.getInventory(theUuid)
      invFlds <- db.getInventoryFields(theUuid)
      inputs  <- db.allInputs
    } yield optInv.map(CacheContext(_,invFlds,inputs))
    

    Future (即等待)应该在代码中稍后完成(如果有的话),此时您可以 .fold() Option 并报告错误。