all*_*cer 3 scala scala-cats zio
我有一个返回一些 ZIO 的方法:
def method(...): ZIO[Any with clock, SomeError, Unit]
Run Code Online (Sandbox Code Playgroud)
调用此返回的方法Task[Unit]:
def otherMethod(..): Task[Unit] = {
ZIO.effect(method(...))
}
Run Code Online (Sandbox Code Playgroud)
问题是当我调用它时ZIO.effect我没有得到结果。我应该如何转换ZIO,以Task获得结果呢?
随着ZIO.effect(method(...)) 你得到一个Task[ZIO[...]]很少是你想要的(它在概念上类似于嵌套Future[Future[A]])。
为了将 aZIO[R, E, A]变成 a Taks[A],您必须了解后者只是 for 的类型别名ZIO[Any, Throwable, A],这表明您必须
R(通过提供)E,Throwable则将错误类型转换为.mapError这应该有效:
def otherMethod(..): Task[Unit] =
method(...)
.mapError(someError => new RuntimeException(s"failed with: $someError"))
.provideLayer(Clock.live)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
167 次 |
| 最近记录: |