解析序列[未来[任一[A,序列[B]-Scala Cats [英] Resolve Seq[Future[Either[A, Seq[B]]]] - Scala Cats
本文介绍了解析序列[未来[任一[A,序列[B]-Scala Cats的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在尝试解决方法的结果时遇到了一个问题。更具体地说,我有:
def methodA(): Future[Either[Error, Seq[A]]]
在某个时刻,我想为列表中的每个元素调用此方法并合并结果。 大概是这样的:
val tes: Seq[Future[Either[Error, Seq[A]]]] = relevantRounds.map(round =>
methodA()
)
您知道如何解析Seq[Future[Either[Error, Seq[A]]]]
吗?
所以我最终想要的是
Future[Either[Error, Seq[A]]]
包含整个列表结果的序列。
推荐答案
尝试.flatTraverse
(用Nested[Future, Either[Error, ?], Vector[A]]
换行Future[Either[Error, Vector[A]]]
)。
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
import cats.data.Nested
import cats.syntax.traverse._
import cats.syntax.functor._
import cats.instances.vector._
import cats.instances.future._
import cats.instances.either._
trait A
def methodA(): Future[Either[Error, Seq[A]]] = ???
trait Round
val relevantRounds: Seq[Round] = ???
val tes: Future[Either[Error, Seq[A]]] =
relevantRounds.toVector
.flatTraverse(round =>
Nested(methodA()).map(_.toVector)
).value
Vector
而不是Seq
,因为reason。
这篇关于解析序列[未来[任一[A,序列[B]-Scala Cats的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文