(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的每个内部顺序调用一个接一个地完成?
答案 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)