Hen*_*ory 11 scala playframework-2.0
有没有办法将Seq [Future [X]]变成枚举器[X]?用例是我想通过抓取网络来获取资源.这将返回一个期货序列,我想返回一个枚举器,它将按照它们首次完成的顺序推送到Iteratee.
看起来Victor Klang的Future select gist可以用来做到这一点 - 尽管看起来效率很低.
注意:有问题的Iteratees和Enumerator是play框架版本2.x给出的,即具有以下导入: import play.api.libs.iteratee._
一个更好、更短、我认为更有效的答案是:
def toEnumerator(seqFutureX: Seq[Future[X]]) = new Enumerator[X] {
def apply[A](i: Iteratee[X, A]): Future[Iteratee[X, A]] = {
Future.sequence(seqFutureX).flatMap { seqX: Seq[X] =>
seqX.foldLeft(Future.successful(i)) {
case (i, x) => i.flatMap(_.feed(Input.El(x)))
}
}
}
}
Run Code Online (Sandbox Code Playgroud)