【发布时间】:2016-06-18 13:43:33
【问题描述】:
我有这个:
case class Sides[A](east: A, west: A)
我想把这个Sides[Future[Boolean]] 转换成这个Future[Sides[Boolean]]
如何使用Future.sequence?
这是docs:
def
sequence[A, M[X] <: TraversableOnce[X]](in: M[Future[A]])(implicit cbf: CanBuildFrom[M[Future[A]], A, M[A]], executor: ExecutionContext): Future[M[A]]
Permalink
Simple version of Future.traverse. Transforms a TraversableOnce[Future[A]] into a Future[TraversableOnce[A]]. Useful for reducing many Futures into a single Future
【问题讨论】:
-
你需要实现
Traverse[Sides]。不会是Future.sequence(没有这样的东西,没有运行Future),而是Sides.sequence。 -
如果你阅读
sequence的定义,你会看到def sequence[A, M[X] <: TraversableOnce[X]](in: M[Future[A]])(implicit cbf: CanBuildFrom[M[Future[A]], A, M[A]], executor: ExecutionContext): Future[M[A]]所以你的Sides需要是TraversableOnce的子类。 -
@mfirry 你能实现吗,我不能做
CanBuildFrom的事情。 -
为什么要使用
Future.sequence?如果您使用的是scala.concurrent.Future,则不会像这样工作:def sequenceSides[A](sides: Sides[Future[A]])(implicit exec: ExecutionContext): Future[Sides[A]] = for { east <- sides.east; west <- sides.west } yield Sides(east, west)? -
@Kolmar 我也有南北,我想要简洁的代码。
标签: scala scalability scalaz