scala - Scala,ZIO - 如何从任务返回值?
问题描述
我有一个简单的理解代码:
def nameFormatter(request: SomeRequest) : FormattedData = {
for {
config <- ZIO.fromOption(configuration.get(request.name)).orElseFail( new Exception("Unknown config"))
name = config.data.name.pipe(SomeName)
} yield FormattedData(
name,
request.age
)
}
但是这个方法返回:
ZIO[Any, Exception, FormattedData]
我想将此方法更改为仅返回FormattedData
,而不是整个 ZIO。可能吗?或者也许我应该以某种方式读取返回的类型并从中获取价值?
解决方案
ZIO 很难做到这一点,因为它不安全并且违背了使用 ZIO 的目的。您可以从类型中看出,如果您尝试实现该值ZIO[Any, Exception, FormattedData]
,它可能会失败。Exception
如果你真的想这样做:
zio.Runtime.default.unsafeRun(nameFormatter(request))
否则,您应该使用以下结果编写其余代码并使用以下内容nameFormatter(request)
运行它:
import zio.{ExitCode, URIO, ZIO}
object Main extends zio.App {
override def run(args: List[String]): URIO[zio.ZEnv, ExitCode] =
(for {
formattedData <- nameFormatter(request)
// rest of your code
} yield ()).exitCode
}
推荐阅读
- html - 如何在 R-Studio 中查看 html?
- android - 垂直ViewPager2中的垂直ScrollView无法正常工作Android
- ios - 以编程方式创建时 UIViewController 的 UIView 位置不明确
- c++ - 采用函数 C++ 的自定义类型声明
- php - 多个日期之间的小时总和
- math - 如何 ansible role1 输出 + role2 输出 = 打印结果
- javascript - 如何从异步等待函数而不是 Promise 返回布尔值
(打字稿|反应) - html - 从前端下载图像标签不起作用
- python - 尝试为 peewee 使用自定义 UUID mixin 不会覆盖基本 AutoField ID
- javascript - JS:不能对将被最小化或置于后台的页面使用异步剪贴板 API