【问题标题】:How to elegantly initialize a Scala service from a database? [closed]如何优雅地从数据库初始化 Scala 服务? [关闭]
【发布时间】:2021-01-24 22:14:51
【问题描述】:

我已经离开 Scala 有一段时间了,所以我试图重新回到习惯用法。我有三个数据库调用:

db.getInventory(inventoryId: UUID): Future[Option[Inventory]]
db.getInventoryFields(inventoryId: UUID): Future[Seq[InventoryField]]
db.allInputs: Future[Seq[Input]]

如果db.getInventorySome(inventory),我想通过给它一个初始化我的服务

CacheContext(inventory: Inventory, fields: Seq[InventoryField], inputs: Seq[Input])

但是如果是None,我想报错返回。

在这里使用for/map/flatMap/fold等的最佳组合是什么?

【问题讨论】:

  • 通过“report an error”你是真的想抛出错误还是将错误推送到应用程序

标签: scala monads future optional


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多