gpt4 book ai didi

scala - 将 Akka 的 Future[A] 转换为 Future[Either[Exception,A]]

转载 作者:行者123 更新时间:2023-12-04 13:20:06 27 4
gpt4 key购买 nike

Akka 中(或 Scala 2.10 的标准库中)是否有一种方法可以转换 Future[A]这可能会失败成 Future[Either[Exception,A]] ?我知道你可以写

f.map(Right(_)).recover {
case e:Exception => Left(e)
}

这似乎是一项如此常见的任务,我不知道我是否忽略了某些东西。我对 Scala 2.9/Akka 和 Scala 2.10 的答案很感兴趣。

最佳答案

缺少此方法的主要原因是它实际上没有很好的语义:静态类型 Future[Either[Throwable, T]]不能确保 future 不会失败,因此类型更改通常不会给您带来太多好处。

如果您控制处理这些 future 的所有代码,这当然是有意义的,在这种情况下,自己添加它是微不足道的(这个名字是由于我在第一次喝咖啡之前发布的,请随意替换为更好的):

implicit class FutureOps[T](val f: Future[T]) extends AnyVal {
def lift(implicit ec: ExecutionContext): Future[Either[Throwable,T]] = {
val p = promise[Either[Throwable,T]]()
f.onComplete {
case Success(s) => p success Right(s)
case Failure(ex) => p success Left(ex)
}
p.future
}
}

它与 Akka 2.0 future 的工作方式非常相似,因此我将这个练习留给读者。

关于scala - 将 Akka 的 Future[A] 转换为 Future[Either[Exception,A]],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14168712/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com