scala - 如何正确使用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)
})
}
}
它有效,但我有一些问题。第一个是连接问题没有解决。第二:我认为它可以做得更容易,不是吗?我找不到正确的方法来做得更好。
解决方案
推荐阅读
- bootstrap-4 - Bootstrap 4 转换的持续时间值是多少?
- mysql - mysql上的嵌套过程
- mongodb - 查找和更新部分嵌套集合
- python - 在 GeoPandas 中翻转经纬度坐标
- c - 指针在 c 中的类型定义中如何工作?
- mysql - 我应该为同一个 SQL 表列选择自动增量和主键吗
- javascript - 标签需要在 Jasmine beforeEach 函数的同一行中关闭吗?
- kotlin - 如何在泛型接口中引用实现类
- selenium-chromedriver - ChromeDriver - 无头选项会导致 WebDriver 崩溃,当应用于添加的扩展程序时
- css - 使用引导导航栏折叠时的边框底部悬停长度