【问题标题】:Flatten 'reactive' call results in Scala在 Scala 中展平“反应式”调用结果
【发布时间】:2014-08-04 14:33:29
【问题描述】:

通过重复链接异步调用,我最终得到了这种糟糕的类型:

Seq[Future[Option[Future[T]]]]

有没有办法将其简化为更易于管理:

Future[Seq[T]]

如:

def simplify[T](x: Seq[Future[Option[Future[T]]]]): Future[Seq[T]] = ???

避免使用Await

【问题讨论】:

    标签: scala future reactive-programming


    【解决方案1】:

    像这样:

    def simplify[T](arg: Seq[Future[Option[Future[T]]]]):Future[Seq[T]] = {
      val seq: Future[Seq[Option[Future[T]]]] = Future.sequence(arg)
      val ret1 = seq.map { seq => Future.sequence(seq.flatten)}
      ret1.flatMap(identity)
    }
    

    【讨论】:

    • 谢谢。我想出了一个更简洁(虽然相当神秘):Future.sequence(x).map(_.flatten).flatMap(Future.sequence(_))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    • 2016-04-12
    • 2022-08-19
    相关资源
    最近更新 更多