使用Async [F]]将Future [A]转换为F [A

问题描述 投票:0回答:1

我正在使用Slick and Cats。

database.run返回一个Future,但是我需要我的类的方法(在F[_]: Async上通用)返回一个monad 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个回答
0
投票

Async.fromFuture是您需要的。和往常一样,scaladoc是您的朋友。

import cats.effect.{Async, ContextShift]

def foo[F[_] : Async : ContextShift]: F[Result] =
  Async.fromFuture(Async[F].delay(database.run(insertion)))
© www.soinside.com 2019 - 2024. All rights reserved.