Ist es möglich, scala.util.Try und scala.concurrent.Future zu verketten? Beide bieten effektiv die gleiche monadische Schnittstelle, aber der Versuch, sie zu verketten, führt zu einem Kompilierungsfehler.Scala - Chaining Futures Versuche Blöcke?
Zum Beispiel. Angesichts der beiden Signaturen unter
def someFuture:Future[String] = ???
def processResult(value:String):Try[String] = ???
ist es möglich, etwas wie folgt zu tun?
val result = for(a <- someFuture; b <- processResult(a)) yield b;
result.map { /* Success Block */ } recover { /* Failure Block */ }
Dies führt offensichtlich in einem Compiler-Fehler, weil Zukunft und versuchen nicht in der Lage sind flatMapp'ed zusammen zu sein.
Es wäre aber ein nettes Feature, sie verketten zu können - ist das überhaupt möglich? Oder muss ich sie zu einem Future [Try [String]] kombinieren?
(Insbesondere bin ich daran interessiert, einen einzigen 'recover' Block zu haben, um Ausnahmen entweder in der Zukunft oder den Versuch zu fangen).
gibt es derzeit eine [Diskussion auf scala-user] (https://groups.google.com/d/topic/scala-user (Mu4_lZAWxz0/Diskussion) über genau dieses Problem der Umwandlung eines 'Try' in ein' Future'. Vielleicht sollte ein solcher Helfer irgendwo in der Standardbibliothek enthalten sein. – gourlaysama
Future.fromTry? –
@ViktorKlang, ja du hast Recht. Ich habe meine Antwort aktualisiert, um diesen Ansatz zu berücksichtigen. Danke für die Köpfe hoch. – cmbaxter