【问题标题】:Transform Future[A] to Future[Try[A]] or EitherT[Future, Throwable, A] [closed]将 Future[A] 转换为 Future[Try[A]] 或 EitherT[Future, Throwable, A] [关闭]
【发布时间】:2020-09-08 06:19:51
【问题描述】:

如何将可能成功或失败的Future[A] 转换为EitherT[Future, Throwable, A] 或Future[Try[A]]。

future.transform(result => Success(result))
EitherT(future.transform(result => Success(result.toEither)))

标准库或 Cats 中是否有实现上述转换的方法?

【问题讨论】:

  • future.transform(Success(_))不好吗?这很简单,为什么你需要另一个库来做到这一点?
  • 我希望 Cats 有一些实用功能,可以简化进一步的处理。现在我有很多像这样的代码OptionT(future.transform(result => Success(result.toOption))))
  • @texasbruce 我已经澄清了这个问题。这是我所期望的更具体,这个问题最初被问得有点不利。

标签: scala scala-cats


【解决方案1】:

ApplicativeError 的attemptT 可以将Future[A] 转换为EitherT[Future, Throwable, A],例如

import cats.data.EitherT
import cats.implicits._

val f: Future[A] = ???
val v: EitherT[Future, Throwable, A] = f.attemptT

https://stackoverflow.com/a/63746823/5205022

【讨论】:

  • @LuisMiguelMejíaSuárez 不,我认为如果你想在Left 中实际使用Throwable 值,那么像EitherT(f.attempt) 这样的东西可能会起作用。
  • @LuisMiguelMejíaSuárez 请查看编辑后的答案。
  • @Aki 您可能也想查看编辑后的答案。
猜你喜欢
  • 1970-01-01
  • 2015-01-31
  • 2018-06-29
  • 2021-04-20
  • 1970-01-01
  • 2012-12-19
  • 2013-12-20
  • 2018-11-12
  • 2013-07-02
相关资源
最近更新 更多