gpt4 book ai didi

Scala, ZIO - 将 Future 转换为 ZIO 或 ZIO 转换为 Future。可能吗?

转载 作者:行者123 更新时间:2023-12-04 16:26:39 25 4
gpt4 key购买 nike

我创建了我的服务的两个版本。第一个使用 Futures,另一个使用 ZIO 作为效果。

我有一个使用 Future 作为结果效果的简单方法:

def get(id: String)(implicit executionContext: ExecutionContext): Future[Data]

我还有一些其他版本使用 ZIO[SomeEnv, SomeError, Data]:

def get(id: String): ZIO[SomeEnv, SomeError, Data]

现在,我需要创建某种适配器,它会从一个版本或另一个版本返回数据:

def returnDataFromServiceVersion(version: Int) : ??? = {
if(version == 1) futureService.get(...)
else zioService.get(...)
}

这里的问题是返回类型。我不知道如何将 ZIO 转换为 future 或将 Future 转换为 ZIO 以获得共同的返回类型。我尝试使用 ZIO.fromFuture{...}toFuture() 但它没有帮助。我的问题是 - 如何创建此 returnDataFromServiceVersion 方法以将其与两种服务一起使用?我这里需要有共同的返回类型。

或者也许有其他方法可以解决这个问题?

最佳答案

你必须决定你的函数是返回 Future 还是 ZIO 并且这不能依赖于你的代码片段中像 version 这样的运行时值(除非当然,您将返回类型定义为 AnyRef - 不是很有用)。
如果你的程序的其余部分是基于 Futures 的,但你想开始在某些服务中引入 ZIO,你可以通过自己使用 执行你的效果来做到这一点>runtime.unsafeRun(效果):

val runtime = Runtime.default

def returnDataFromServiceVersion(version: Int): Future[Data] = {
runtime.unsafeRunToFuture(
zioService.get(...)
)
}

更多详情请引用Running Effects在官方 ZIO 文档中。

关于Scala, ZIO - 将 Future 转换为 ZIO 或 ZIO 转换为 Future。可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62678605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com