我正在使用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)
但是那不是肯定的方法,因为它阻塞了线程。
是否有适当的方法来做到这一点?
Async.fromFuture
是您需要的。和往常一样,scaladoc是您的朋友。
import cats.effect.{Async, ContextShift]
def foo[F[_] : Async : ContextShift]: F[Result] =
Async.fromFuture(Async[F].delay(database.run(insertion)))