在使用 monix.eval.Task 或 zio.Task 时,是否有一种简单的方法可以将 Task 的 Option 转换为 Task of Option?
答案 0 :(得分:2)
如果您想要一个纯粹的 ZIO 解决方案,您可以将 .foreach
与 identity
结合使用:
val fx: Option[UIO[Int]] = Option(Task.effectTotal(42))
val res: UIO[Option[Int]] = ZIO.foreach(fx)(identity)
如果您还使用 cats
,则您要查找的方法称为 .sequence
。
import cats.implicits.toTraverseOps
import zio.interop.catz._
import zio.{Task, UIO}
val fx: Option[UIO[Int]] = Option(Task.effectTotal(42))
val res: UIO[Option[Int]] = fx.sequence
相反的方式是不可能的,因为需要实现 Task
才能将其提升为 Option[T]
。