从映射方法中失败一个Future

时间:2018-01-11 15:25:25

标签: scala future

我有一个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失败?甚至是更简单/更惯用的解决方案?

1 个答案:

答案 0 :(得分:2)

您可以使用flatMap代替:

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