E 'possibile catena scala.util.Try e scala.concurrent.Future? Entrambi forniscono effettivamente la stessa interfaccia monadica, ma il tentativo di concatenarli genera un errore di compilazione.Scala - Chaining Futures Prova i blocchi?
Ad esempio. Date le due firme sotto
def someFuture:Future[String] = ???
def processResult(value:String):Try[String] = ???
è possibile fare qualcosa di simile al seguente?
val result = for(a <- someFuture; b <- processResult(a)) yield b;
result.map { /* Success Block */ } recover { /* Failure Block */ }
risultati di questa, ovviamente, in un errore di compilazione, perché Futuro e provare sono in grado di essere flatMapp'ed insieme.
Sarebbe comunque una bella caratteristica essere in grado di incatenarli - è possibile? O devo combinarli in un futuro [Prova [stringa]]?
(In particolare, mi interessa avere un unico blocco "recupero" per rilevare eccezioni nel futuro o nel tentativo).
Attualmente v'è una [discussione su scala-user] (https://groups.google.com/d/topic/scala-user/Mu4_lZAWxz0/discussione) su questo esatto problema di convertire un 'Try' in un' Future'. Forse un aiutante come questo dovrebbe essere incluso nella libreria standard da qualche parte. – gourlaysama
Future.fromProva? –
@ViktorKlang, sì hai ragione. Ho aggiornato la mia risposta per includere questo approccio. Grazie per il testa a testa. – cmbaxter