2

假设我有这样的功能(我使用 akka 2.0.2):

def foo(message: String): Future[SomeClass] =
  for {
    result <- actor ? message
  } yield SomeClass(result)

函数的调用者设置onSuccessonFailure挂钩未来,所以如果我想让一个演员违背承诺,我让它发akka.actor.Status.Failure回给发送者。这工作得很好。现在,如果我想检查某些条件foo并在条件失败/成功的情况下返回失败的未来怎么办?

def foo(message: String): Future[SomeClass] =
  if(...) {
    ...//return failed future
  } else {
    for {
      result <- actor ? message
    } yield SomeClass(result)
  }

“返回失败的未来”块应该是什么样的?我需要一个执行上下文来实现它吗?

4

1 回答 1

5

只需返回一个表达式:Promise.failed(new Exception),其中的例外是您希望让未来失败的那个。如果您从 2.10 开始使用 Scala 标准库中的 Scala 期货和承诺,则不需要执行上下文。

Akka 期货和承诺需要failed承诺方法的隐式执行上下文。执行上下文伴随对象中应该有一个可用的默认执行上下文,如果您有一个ActorSystem可用的实例,您可以使用它。

于 2012-06-27T08:47:26.927 回答