gpt4 book ai didi

scala - Scala Future 的优雅处理[任一]]

转载 作者:行者123 更新时间:2023-12-05 08:43:12 24 4
gpt4 key购买 nike

我有一个类型,它的形状是这样的:

val myType: Future[Either[MyError, TypeA]] = // some value

我知道我可以对此进行模式匹配并获得 Right 或 Left 类型,但问题是我必须嵌套我的模式匹配逻辑。我正在寻找更优雅的处理方式吗?有什么建议吗?

最佳答案

如果您将 MyError 编码为异常,则您不再需要 Either 并且可以简单地针对完成进行 patternMatch,或使用 recoverWith 将其映射到另一种类型:

myType.onComplete {
case Success(t) =>
case Failure(e) =>
}

要映射您现有的 Either 类型,您可以这样做:

case class MyException(e: MyError) extends Exception

def eitherToException[A](f: Future[Either[MyError,A]]): Future[A] = {
f.flatMap {
case Left(e) => Future.failed(MyException(e))
case Right(x) => Future.successful(x)
}
}

val myType2 = eitherToException(myType)

或者,如果 MyErrorTypeA 在您的控制之下,您可以创建一个通用的父类(super class)型和模式匹配:

sealed trait MyResult
final case class MyError() extends MyResult
final case class TypeA() extends MyResult

myType.map {
case MyError() => ...
case TypeA() => ...
}

关于scala - Scala Future 的优雅处理[任一]],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33309674/

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