首页 文章

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

提问于
浏览
1

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

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

2 回答

  • 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)
        }
      ))
    
  • 1

    如果你把一个可能失败的未来变成一个在任何情况下都会成功的未来,然后使用 Future.sequence 怎么样?

相关问题