我要学习zio图书馆的refineXXX。为此,我编写了简单的代码。
import zio.ZIOAppDefault
import zio.Unsafe.unsafe
import zio._
import java.sql.SQLException
object Bot extends ZIOAppDefault {
val codeWithExc: ZIO[Any,Throwable,Int] =
ZIO.fail(new SQLException("message of SQL error."))
val MainApp: ZIO[Any, Throwable, Int] = for {
_ <- Console.printLine("Begin")
res <- codeWithExc
_ <- Console.printLine(s" res = $res")
} yield res
def run: URIO[ZIOAppArgs, ExitCode] =
for {
res <- MainApp.exitCode
} yield res
}
unsafe{ implicit u =>
Runtime.default.unsafe.run(Bot.run.provide(ZIOAppArgs.empty))
}当我在IDEA工作表中运行它时,我会看到输出:
Begin
res0: zio.Exit[Nothing,zio.ExitCode] = Success(ExitCode(1))预期在res <- codeWithExc失败和主要纤维死亡。
发布于 2022-10-04 19:51:02
这里的问题是,您正在将ZIO映射到.exitCode,后者返回不能真正失败的URIO。失败将映射到成功,而告诉它确实失败的唯一原因是验证ExitCode不是0。如果您更改您的代码并将其替换为如下所示,它将看起来工作正常:
def run = MainApphttps://stackoverflow.com/questions/73940507
复制相似问题