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