首页 > 解决方案 > 如何干净地处理嵌套的 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)
      }
    }

标签: scalafuture

解决方案


您应该flatMap

def deleteInfoByID(identifier: Int): Future[Bool]
  getInfo(identifier).flatMap {
    case Some(id) => deleteInfoByID(id)
    case _ => Future.successful(false)
  }

推荐阅读