Chain Scala Futures Rückgabetyp

7

Ich versuche Futures in Scala zu verketten, aber es gibt mir den falschen Rückgabetyp.

Ich habe die folgenden Methoden:

%Vor%

Aber jetzt bekomme ich den Fehler, dass der getUUIDRecordByModel Rückgabetyp Future[Option[FlightByDetailModel]]

ist

Wie kette ich sie richtig?

    
elmalto 04.09.2014, 19:01
quelle

4 Antworten

8

Ich würde stattdessen flatMap verwenden.

%Vor%

andThen wendet eine Nebeneffektfunktion an und gibt das Original Future zurück, nicht das innere.

    
Michael Zajac 04.09.2014, 19:34
quelle
5

Diese Lösung und die 2 darüber sind im Grunde gleich. Sie schlagen die einfache Antwort der Zusammensetzung von flatMaps vor. Das ist gut für einmalige Lösungen.

%Vor%

Ich vermute, dass Sie angesichts der Methodensignaturen diese Strategie sehr oft verwenden werden. Wenn dies der Fall ist, wird die obige Antwort von Eugene Zhulenev empfohlen (die eine funktionellere Lösung darstellt). Thought Monad Transformers können auf den ersten Blick ein wenig einschüchternd wirken, der Code-Block hier:

%Vor%

Ist sehr einfach und skalierbar, wenn Sie Komplexität hinzufügen. Hoffentlich hilft dir das.

    
jordan3 04.09.2014 19:52
quelle
3

Sie können es gut mit Scalaz-Monade-Transformatoren tun, genauer gesagt mit OptionT. Sie können schöne Reihe von Artikeln schöpfen, und spezifischer benötigen Sie diese: Ссылка

Dieser ist gut zu: Ссылка

%Vor%

Um optionT mit scala.concurrent.Future verwenden zu können, müssen die Functor- und Monad-Instanzen im Bereich

liegen %Vor%     
Eugene Zhulenev 04.09.2014 19:27
quelle
2

Eine einfache Lösung ist die Verwendung von flatMap für die Zusammensetzung anstelle von und dann, die eher für den Umgang mit Nebenwirkungen spezialisiert ist:

%Vor%

Für die Arbeit mit Futures fand ich es hilfreich, diese Seite mehrmals zu lesen.

    
Spiro Michaylov 04.09.2014 19:31
quelle

Tags und Links