假设我有这样的函数(我使用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)
"回归失败的未来"块应该是什么样的?我需要执行上下文来实现它吗?
只需返回一个表达式:Promise.failed(new Exception),其中异常是您希望将来失败的异常.如果您在2.10的Scala标准库中使用Scala期货和承诺,则不需要执行上下文.
Akka期货和承诺需要failedpromise方法的隐式执行上下文.执行上下文伴随对象中应该有一个默认的执行上下文,您可以使用它,因为您有一个ActorSystem可用的实例.