【问题标题】:Transform Future[A] to F[A] with Async[F]使用 Async[F] 将 Future[A] 转换为 F[A]
【发布时间】:2020-06-17 00:11:14
【问题描述】:

我正在与 Slick 和 Cats 合作。

database.run 返回一个Future,但我需要我的类的方法(F[_]: Async 上的泛型)返回一个单子F。我可以让它像这样工作

val future = database.run(insertion)    
val result = Await.result(future, Duration.Inf)    
Async[F].delay(result)

但这肯定不是应该这样做的方式,因为它阻塞了线程。

有什么合适的方法吗?

【问题讨论】:

    标签: scala monads future scala-cats tagless-final


    【解决方案1】:

    Async.fromFuture 是您所需要的。
    一如既往,scaladoc 是您的朋友。

    import cats.effect.{Async, ContextShift]
    
    def foo[F[_] : Async : ContextShift]: F[Result] =
      Async.fromFuture(Async[F].delay(database.run(insertion)))
    

    【讨论】:

      猜你喜欢
      • 2018-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-19
      相关资源
      最近更新 更多