我有一个Future[Option[X]]
,如果Option
为空,则希望以外部Future
失败的方式“取消装箱”内部Option
,并直接提供否则。换句话说,我想将整个事情扁平化为Future[X]
。
我能想到的最明显的方法是使用map
并在那里进行匹配,但我不知道如何在失败的Future
中结束。如下所示抛出异常似乎只是冒了一个异常,导致应用程序崩溃:
xOptionFuture map(optional => {
optional match {
case x: X => x
case _ => throw new IllegalArgumentException
}
})
有没有办法在Future
内触发map
失败?甚至是更简单/更惯用的解决方案?
答案 0 :(得分:2)
您可以使用flatMap
代替:
xOptionFuture.flatMap {
case Some(x) => Future.successful(x)
case None => Future.failed(new IllegalArgumentException("Option is None"))
}