我需要做什么来移植ReactiveMongo scala以使用cats效果?
如果我想在像http4s这样的东西中使用ReactiveMongo,那么我必须将ReactiveMongo返回的所有调用打包成Cats IO效果,这样说对吗我需要做什么来移植ReactiveMongo scala以使用cats效果?,scala,reactivemongo,cats-effect,Scala,Reactivemongo,Cats Effect,如果我想在像http4s这样的东西中使用ReactiveMongo,那么我必须将ReactiveMongo返回的所有调用打包成Cats IO效果,这样说对吗 在较高的层次上,我需要采取哪些步骤将ReactiveMongo合并到http4s中?Cats Effect提供了Asynctypeclass,它允许您将一些回调(例如未来的onComplete)转换为F。安: 实际上,Async[F]evan有一种方法可以将Future提升为Async:Async[F].fromFuture(Sync[F]
在较高的层次上,我需要采取哪些步骤将ReactiveMongo合并到http4s中?Cats Effect提供了
Async
typeclass,它允许您将一些回调(例如未来的onComplete
)转换为F
。安:
实际上,Async[F]
evan有一种方法可以将Future提升为Async:Async[F].fromFuture(Sync[F].defer(Future))
(Future
包装在IO中,因为它的创建会产生副作用,并触发急切的计算)
但是,如果您固定使用cats.effect.IO
,您只需使用IO.fromFuture(IO(future))
您必须在任何需要将Future转换为IO(或其他F)的地方使用此功能(或将某些实用程序委托给此功能)。简短回答:是
import cats.effect.{IO, Async}
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Future
val apiCall = Future.successful("I come from the Future!")
val ioa: IO[String] =
Async[IO].async { cb =>
import scala.util.{Failure, Success}
apiCall.onComplete {
case Success(value) => cb(Right(value))
case Failure(error) => cb(Left(error))
}
}
ioa.unsafeRunSync()