如何正确使用IO?

时间:2019-04-07 19:57:16

标签: scala functional-programming akka-http scala-cats

我有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)
      })
  }
}

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

0 个答案:

没有答案