scala - 如何干净地处理嵌套的 Future[Option[A]]
问题描述
我认为这可能是一个简单的问题,但我真的很难做到正确,我有以下功能:
def getInfo(identifier: Int): Future[Option[Info]]
def deleteInfo(info: Info): Future[Bool]
我正在尝试实现以下内容:
def deleteInfoByID(identifier: Int): Future[Bool]
我想知道最干净的方法是什么?我在 map 和 flatMap 上尝试了一些变体,但我似乎无法将 deleteInfo 的结果传播回顶部:
def deleteInfoByID(identifier: Int): Future[Bool]
getInfo(identifier).map { infoOpt: Option[Info] =>
infoOpt.map { info =>
deleteInfoByID(identifier)
}
}
解决方案
您应该flatMap
:
def deleteInfoByID(identifier: Int): Future[Bool]
getInfo(identifier).flatMap {
case Some(id) => deleteInfoByID(id)
case _ => Future.successful(false)
}
推荐阅读
- r - 根据长度拆分字符向量
- python-3.x - pandas 将两列合并为一个新列
- jquery - ASP.NET Core 5 data-ajax 属性未应用于通过函数提交的表单
- sql - SQL 对不同列的多个查询
- sql-server - SSIS 数据分析任务编辑器返回错误代码
- python - 为什么 Pycharm 在重构时会自动重命名 Jupyter notebook 中的某些方法,而其他方法则不会?
- docker - 使用 k6 docker 映像安装扩展的最佳方式?
- aws-lambda - EventBridge 消息是否总是进入 CloudWatch 日志?
- javascript - 单击按钮后程序两次进入 eventListener
- r - 如何根据字符串的匹配部分合并 R 中的两个数据框?