从映射方法失败未来



我有一个Future[Option[X]],并希望以外部FutureOption为空时失败的方式"拆箱"内部Option,否则直接提供值。换句话说,我想把整个事情扁平化为一个Future[X]

我能想到的最明显的方法是在那里使用 map 和匹配,但我看不出如何以失败的Future告终。按如下方式抛出异常似乎只是冒泡该异常,使应用程序崩溃:

xOptionFuture map(optional => {
  optional match {
    case x: X => x
    case _ => throw new IllegalArgumentException
  }
})

有没有办法从map内部触发Future故障?甚至是更简单/更惯用的解决方案?

您可以使用

flatMap,例如:

xOptionFuture.flatMap {
    case Some(x) => Future.successful(x)
    case None => Future.failed(new IllegalArgumentException("Option is None"))
}

最新更新