【发布时间】:2017-12-22 02:04:35
【问题描述】:
我使用 Akka myActor1 向另一个 myActor2 询问未来的响应,如下所示:
val future = myActor2 ? request
val result = Await.result(future, timeout.duration).asInstanceOf[Person]
假设结果是这样的案例类:
case class Person(name: String, age: Int)
我不想阻止进程,所以我选择不使用 Await.result。 因此我有以下代码:
val future = (myActor2 ? request).mapTo[Person]
现在 future 是 Future[Person] 而不是 Future[Any]。 那么我怎样才能提取未来包含的人并处理异常? 我用 onComplete 尝试了一些东西,但 Success 似乎只接受 Int 而不是 Person。我想要以下内容:
future onComplete {
case Success(result) => result
case Failure(failure => doSomethingOnFailure(failure)
}
你有什么想法吗?
【问题讨论】:
-
当你在两个演员之间交流时,你永远不应该使用询问。使用告诉然后收听响应消息。
-
你检查
pipe函数了吗? doc.akka.io/docs/akka/current/… -
你不能也不应该从一元上下文中提取价值,而是在其中进行组合。