用于异步计算的抽象,不会失败

时间:2015-10-11 20:03:19

标签: scala asynchronous future scalaz

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对它们进行处理(即没有失败的快速行为),但是这些类型没有携带这些信息。

1 个答案:

答案 0 :(得分:0)

如果Either带有错误信息,我就不会将其Future。只需使用未来的失败方面。

Future(Right(User))           -> Future[User](User)
Future(Left(Service123Error)) -> Future[User](throw Service123Error)