我有一个Future[Option[X]]
,并希望以外部Future
在Option
为空时失败的方式"拆箱"内部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"))
}