3

在使用monix.eval.Taskzio.Task时,是否有一种简单的方法可以将 Task 的 Option 转换为Option的 Task?

4

1 回答 1

3

如果您想要一个纯 ZIO 解决方案,您可以使用.foreachwith 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].

于 2021-07-01T14:29:45.400 回答