解析序列[未来[任一[A,序列[B]-Scala Cats [英] Resolve Seq[Future[Either[A, Seq[B]]]] - Scala Cats

查看:16
本文介绍了解析序列[未来[任一[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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆