如何失败akka承诺?

Ser*_*iss 2 scala future akka

假设我有这样的函数(我使用akka 2.0.2):

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

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

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

"回归失败的未来"块应该是什么样的?我需要执行上下文来实现它吗?

axe*_*l22 5

只需返回一个表达式:Promise.failed(new Exception),其中异常是您希望将来失败的异常.如果您在2.10的Scala标准库中使用Scala期货和承诺,则不需要执行上下文.

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