#scala #functional-programming #akka-http #scala-cats
#scala #функциональное программирование #akka-http #scala-кошки
Вопрос:
У меня есть 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)
})
}
}
Это работает, но у меня есть несколько проблем с этим. Первая проблема — проблема подключения не решена. Второе: я думаю, это можно было бы сделать проще, не так ли? Я не могу найти правильные методы, чтобы сделать это лучше.
Комментарии:
1. «Первая проблема — проблема подключения не решена». В чем проблема, которая не решена?
2. Например, проблема с таймаутом соединения.
3. Что вы подразумеваете под «правильно»? Например, возврат
IO[Joke]
изgetJoke()
и не вложенный либо с еще одним каналом ошибок?