首页 > 解决方案 > 处理 scala ZIO 中的错误

问题描述

我想使用 catchAll 或 catchSome 处理 ZIO 中的一些异常,如下所示:

object Test extends App {

  def run(args: List[String]) =
    myApp.fold(_ => 1, _ => 0)

 val myApp =
    for {
      _ <- putStrLn(unsafeRun(toINT("3")).toString)
    } yield ()

def toINT(s: String): IO[IOException, Int]= {
     IO.succeed(s.toInt).map(v => v).catchAll(er =>IO.fail(er))
  }

如果我传递了有效的格式号,代码成功,但如果我传递了无效的格式和想法,它无法处理异常??

标签: scalaerror-handlingzio

解决方案


s.toIntIO在单子之外进行评估。发生的情况是您s.toInt首先评估并尝试将结果传递给IO.succeed,但是在您可以将任何内容传递给之前已经引发了异常IO.succeed。名字succeed已经基本表明你确定你传递的任何东西都是一个不会失败的普通值。

文档建议使用Task.effect,IO.effectZIO.effect来提升可能失败的效果ZIO


推荐阅读