如何调用Await.ready以使函数返回EitherT [Future,Failure,Result]

时间:2019-07-29 23:24:00

标签: scala scalaz scala-cats

(1)我有一个函数将EitherT返回为

createData(m):EitherT[Future, Failure, Result]

(2)我想按顺序执行以下转换,以便等待对createData的每次调用一个接一个地完成。

val futures = group.map { m => Future {createData(m)}}
Await.ready(Future.sequence(futures),10)

(3)但是,Await.ready要求Future传入,因此在上面的代码中,我将EitherT与Future进行了包装。但是我认为上面的代码(2)并没有实现我想要的功能。由于等待仅用于外部包装程序的将来,因此它不关心createData的内部真正的Future是否完成。

我的问题:

在这种情况下(EitherT Future),我应该如何调用Await来等待对createData的每个内部顺序调用一个接一个地完成?

1 个答案:

答案 0 :(得分:0)

.value返回您未转换的类型。 F是您的情况下的Future

val value: F[Either[A, B]]

这意味着您的问题应该归结为(用于说明的类型):

val futures: List[Future[Either[Failure, Result]]] = group.map {m => createData(m).value}
val results: List[Either[Failure, Result]] = Await.ready(Future.sequence(futures), 10)