2

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

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

4

2 回答 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)
    }
  ))
于 2016-02-09T20:20:58.033 回答
1

如果你把一个可能失败的未来变成一个无论如何都会成功的未来,然后使用Future.sequence?

于 2016-02-09T19:56:29.350 回答