首页 > 解决方案 > 如何正确使用Either with IO?

问题描述

我有AkkaHttp客户和cats图书馆。我想逃避抛出异常,所以我写了这段代码:

class AkkaHttpJokeClient(url: String)(implicit system: ActorSystem) extends JokeClient[IO] {
  override def getJoke(): IO[Either[Throwable, Joke]] = {
    implicit val materializer: ActorMaterializer = ActorMaterializer()
    implicit val ec: ExecutionContext = system.dispatcher

    IO.fromFuture(IO {
      Http()
        .singleRequest(HttpRequest(uri = url))
        .flatMap(Unmarshal(_).to[String])
        .map(x => Try{x.parseJson.convertTo[Joke]}.toEither)
      })
  }
}

它有效,但我有一些问题。第一个是连接问题没有解决。第二:我认为它可以做得更容易,不是吗?我找不到正确的方法来做得更好。

标签: scalafunctional-programmingakka-httpscala-cats

解决方案


推荐阅读