Ich habe eine routes-Klasse (Absender), einen Akteur und eine Hilfsklasse. Von der Route-Klasse sende ich eine Anfrage an den Schauspieler und bekomme eine Future-Antwort. Jetzt möchte ich die zukünftige Antwort an den Helfer weitergeben und ihn dort lösen.[Scala, Akka]: Future onComplete wird nicht außerhalb des Absenders ausgeführt
TestRoute.scala:
val response: Future[Any] = (actor ? request) (timeout)
handler(response)(executionContext)
TestHelper.scala:
def handler(futureResponse: Future[Any])(implicit ec: ExecutionContext): StandardRoute = {
onComplete(futureResponse) {
case Success(s) => complete(s)
case Failure(f) => reject
}
}
Das Problem ist, dass während onComplete
Werke aus TestRoute.scala
, es funktioniert nicht, wenn zu TestHelper.scala
bewegt. Irgendwelche Ideen, was das Problem sein könnte?
EDIT: Mit „es nicht‚funktioniert, dann meine ich, dass die gesamte onComplete Funktion wird übersprungen und nicht ausgeführt - keine Fehler, nur über überspringt
Was genau meinen Sie mit „es funktioniert nicht“? – Pedro
Ihre Frage braucht mehr Kontext. Nach dem, was ich sagen kann, sollte Ihre Handler-Funktion entweder eine neue Future [StandardRoute] oder eine Einheit zurückgeben, wenn sie eine Nebenwirkung hat. – zlace
Der Code sieht für mich ungefähr OK aus, wie trainierst du es, wenn du sagst, dass es "nur übersprungen" wird? Haben Sie versucht, print/log-Anweisungen hinzuzufügen, um sicherzustellen, dass keiner der Fälle ausgewertet wird? –