scala - 如何让 akka promise 失败?

标签 scala akka future

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

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

函数的调用者设置了 onSuccessonFailure Hook future ,所以如果我想让一个 Actor 违背 promise ,我会让它发送 akka .actor.Status.Failure 返回给发送者。效果很好。现在,如果我想检查 foo 中的某些条件并在条件失败/成功时返回失败的 future,该怎么办?

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

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

最佳答案

只需返回一个表达式:Promise.failed(new Exception),其中的异常是您希望 future 失败的异常。如果您在Scala standard library from 2.10中使用Scala futures 和promise,则不需要执行上下文。 .

Akka futures and promises需要 failed Promise 方法的隐式执行上下文。 execution context companion object 中应该有一个可用的默认执行上下文。 ,只要您有可用的 ActorSystem 实例,就可以使用它。

关于scala - 如何让 akka promise 失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11222029/

相关文章:

Scala - tuple3 - 语法糖

scala - 防火墙后面的 Akka 对等点

apache-spark - 无法使用akka获取CassandraTableScanRDD

c++ - std::async 使用同一个线程,我的代码没有实现并行。

scala - Scala 中的 Future 和无限循环

multithreading - 如何保证akka中fork的顺序

scala - 如何不使用 ScalatestRouteTest 绑定(bind)到本地主机

scala - 为什么我可以更新 scala 中扩展不可变特征的对象的状态

java - 如何从命令行在 IntelliJ IDEA 中打开 Play 应用程序?

scala - 如何将 Akka Streams Merge 的输出通过管道传输到另一个 Flow?