将未来[单位]转换为Scala中的Try [Unit]

Rob*_*her 1 scala future akka-persistence

我正在尝试实现一个API方法(AsyncWriteJournal.asyncWriteMessages- Akka 2.4的持久性API的一部分),它要求我返回一个Future[Seq[Try[Unit]]].这个想法是可以执行许多操作,其中任何操作可以单独成功或失败,未来可以用于等待所有操作的完成.即使在个别运营中出现某种类型的失败,未来本身也可以成功.

我正在使用的基础操作(Rediscala)返回Futures但我仍然试图将a Seq[Future[Unit]]转换为所需的返回类型.我可以Promise在每个操作上使用并将它们绑在一起,Future.sequence但如果任何操作失败,那么结果将来会失败,这不是正确的行为

Ale*_*rov 5

这是你想要的吗?

def transform(ops: Seq[Future[Unit]])(implicit ec: ExecutionContext): Future[Seq[Try[Unit]]] =
  Future.sequence(ops.map (
    _.map(Success(_)).recover {
      case ex => Failure(ex)
    }
  ))
Run Code Online (Sandbox Code Playgroud)