ich Akka myActor1 verwenden wie unten eine andere myActor2 für eine zukünftige Antwort zu fragen:Wie Objekt in einer Zukunft in Scala erhalten
val future = myActor2 ? request
val result = Await.result(future, timeout.duration).asInstanceOf[Person]
lassen Sie uns sagen Ergebnis ein Fall Klasse ist wie folgt:
case class Person(name: String, age: Int)
Ich möchte den Prozess nicht blockieren, also wähle ich nicht Await.result zu verwenden. So habe ich den folgenden Code:
val future = (myActor2 ? request).mapTo[Person]
jetzt ist Zukunft Zukunft [Person] und keine Zukunft [Alle]. Wie kann ich dann die in der Zukunft enthaltene Person extrahieren und Ausnahme behandeln? Ich habe etwas mit onComplete versucht, aber Erfolg scheint nur Int und nicht Person zu akzeptieren. Ich möchte etwas wie unten:
future onComplete {
case Success(result) => result
case Failure(failure => doSomethingOnFailure(failure)
}
Haben Sie eine Idee?
Wenn Sie zwischen zwei Schauspielern kommunizieren, sollten Sie niemals eine Frage stellen. Verwenden Sie eine Tell und hören Sie sich eine Antwort an. –
Haben Sie die Funktion 'pipe' überprüft? https://doc.akka.io/docs/akka/current/actors.html?language=scala#ask-send-and-receive-future – mfirry
Sie können und sollten keinen Wert aus einem monadischen Kontext extrahieren, sondern darin verfassen. – cchantep