我刚刚开始评估 ZIO 以改进我的异步 Scala 代码的编程模型和性能。在我的代码库中,我Future[Option[T]]
经常处理,到目前为止,我已经使用 Scalaz 的OptionT
monad 转换器处理了这个问题。现在我想用 ZIO 试试这个。
考虑两个函数:
def foo: String => Future[Option[T]]
和
def bar: T => Future[U]
我试过这样的事情:
val t = for {
o: Option[Int] <- ZIO.fromFuture { implicit ec =>
foo("test")
}
i: Int <- ZIO.fromOption(o)
s: String <- ZIO.fromFuture { implicit ec =>
bar(i)
}
} yield s
根据我的 IDE,在这种情况下t
属于类型。ZIO[Any, Any, String]
我不知道该怎么办。
我想考虑三种可能性:
foo
产生一个Some
可以与值上的其他函数组合的“成功”案例foo
产生一个的情况None
- 任一函数产生错误的情况
我不确定如何使用 ZIO 在这种情况下解析这些可能性。任何帮助表示赞赏。