问题描述
def method(...): ZIO[Any with clock,SomeError,Unit]
def otherMethod(..): Task[Unit] = {
ZIO.effect(method(...))
}
问题是当我用 ZIO.effect
调用它时,我没有得到结果。
我应该如何将 ZIO
转换为 Task
以获得结果?
解决方法
使用 ZIO.effect(method(...))
,您会得到一个很少是您想要的 Task[ZIO[...]]
(它在概念上类似于嵌套的 Future[Future[A]]
)。
为了把ZIO[R,E,A]
变成Taks[A]
,你必须明白后者只是ZIO[Any,Throwable,A]
的类型别名,这表明你必须
- 消除对环境的依赖
R
(通过提供) - 如果错误类型
E
还不是它的子类型(例如通过Throwable
),则将错误类型.mapError
转换为def otherMethod(..): Task[Unit] = method(...) .mapError(someError => new RuntimeException(s"failed with: $someError")) .provideLayer(Clock.live)
这应该有效:
next.config.js