Scala Futures
是异步计算的优秀抽象,可能会失败。当我知道没有可能的失败时,我应该使用什么抽象?
这是一个具体的用例:
case class Service123Error(e: Throwable)
val f1: Future[User] =
service123.call()
val f2: Future[Either[Service123Error, User]] =
f1.map(Right.apply)
.recover { case e => Left(Service123Error(e)) }
在此代码中,类型不会模拟f2
始终成功完成的事实。给定了几个类似于f2
的值,我知道我可以Future.sequence
对它们进行处理(即没有失败的快速行为),但是这些类型没有携带这些信息。
答案 0 :(得分:0)
如果Either
带有错误信息,我就不会将其Future
。只需使用未来的失败方面。
Future(Right(User)) -> Future[User](User)
Future(Left(Service123Error)) -> Future[User](throw Service123Error)