Scala 如何干净地处理嵌套的未来[选项[A]]

Scala 如何干净地处理嵌套的未来[选项[A]],scala,future,Scala,Future,我认为这可能是一个简单的问题,但我真的很难把它弄对,我有以下功能: def getInfo(identifier: Int): Future[Option[Info]] def deleteInfo(info: Info): Future[Bool] 我正在尝试实现以下内容: def deleteInfoByID(identifier: Int): Future[Bool] 我想知道最干净的方法是什么?我尝试了map和flatMap的一些变体,但似乎无法将deleteInfo的结果传播回顶

我认为这可能是一个简单的问题,但我真的很难把它弄对,我有以下功能:

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(标识符:Int):未来[Bool]
getInfo(标识符).flatMap{
案例部分(id)=>deleteInfoByID(id)
case=>Future.successful(false)
}
我是
fold()
的粉丝


如果找不到任何信息,
deleteInfoByID
的返回值应该是多少<代码>错误?-另外,虽然
Future[Option[A]]
没有什么问题,但有些人更喜欢使用
Future[A]
并在
A
缺失时抛出自定义异常。我更喜欢
选项
,但您可能对该选项感兴趣。
def deleteInfoByID(identifier: Int): Future[Boolean] =
  getInfo(identifier)
    .flatMap(_.fold(Future.successful(false))(deleteInfo))