【问题标题】:How to call Await.ready for function returning EitherT[Future,Failure,Result]如何为返回 EitherT[Future,Failure,Result] 的函数调用 Await.ready
【发布时间】:2023-04-07 02:41:02
【问题描述】:

(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 传入,所以在上面的代码中,我用 Future 包裹了 EitherT。但我认为上面的代码(2)并没有做我想做的事。因为 Await 仅用于外包装 Future,它并不关心 createData 的内部真实 Future 是否完成。

我的问题:

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

【问题讨论】:

    标签: scala scalaz scala-cats


    【解决方案1】:

    .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)
    

    【讨论】:

      猜你喜欢
      • 2019-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-29
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      相关资源
      最近更新 更多