Uso Finagle come un server Web che voglio restituire a Scala-Futures dalla logica dell'applicazione. Come convertire scala.concurrent.Future in com.twitter.util.Future, ovviamente in modo non bloccante?convertiamo il futuro di Scala nel futuro di Twitter
risposta
Avere ambiente non abbastanza per testare questo, ma qui è quello che io scrivo per "com.twitter" %% "finagle-http" % "6.25.0"
:
import com.twitter.{util => twitter}
import scala.concurrent.{ExecutionContext, Promise, Future}
import scala.util.{Failure, Success, Try}
import language.implicitConversions
object TwitterConverters {
implicit def scalaToTwitterTry[T](t: Try[T]): twitter.Try[T] = t match {
case Success(r) => twitter.Return(r)
case Failure(ex) => twitter.Throw(ex)
}
implicit def twitterToScalaTry[T](t: twitter.Try[T]): Try[T] = t match {
case twitter.Return(r) => Success(r)
case twitter.Throw(ex) => Failure(ex)
}
implicit def scalaToTwitterFuture[T](f: Future[T])(implicit ec: ExecutionContext): twitter.Future[T] = {
val promise = twitter.Promise[T]()
f.onComplete(promise update _)
promise
}
implicit def twitterToScalaFuture[T](f: twitter.Future[T]): Future[T] = {
val promise = Promise[T]()
f.respond(promise complete _)
promise.future
}
}
E 'anche possibile utilizzare Twitter biiezioni libreria: https://github.com/twitter/bijection
Vale a dire com.twitter.bijection.twitter_util.UtilBijections
(https://github.com/twitter/bijection/blob/develop/bijection-util/src/main/scala/com/twitter/bijection/twitter_util/UtilBijections.scala)
Questa libreria gestisce i dettagli importanti, ad esempio se si convertono gli oggetti avanti e indietro, si apre solo l'oggetto originale.
Ecco un esempio utilizzando la libreria biiezione twitter:
import scala.concurrent.{Future => ScalaFuture}
import com.twitter.util.{Future => TwitterFuture}
// extend values by adding the conversion method "as"
import com.twitter.bijection.Conversion.asMethod
// pull in various implicit converters that "as" expects,
// including twitter2ScalaFuture:
import com.twitter.bijection.twitter_util.UtilBijections._
def doSomething: ScalaFuture[T] = {
val response: TwitterFuture[T] = ???
response.as[ScalaFuture[T]]
}
Ho anche bisogno di importare un ExecutionContext 'import scala.concurrent.ExecutionContext.Implicits.global' – suicide
- 1. Quali sono i vantaggi di un futuro di Twitter su un futuro di Scala?
- 2. Converti futuro scala per il futuro del Java
- 3. Opzione Scala [Futuro [T]] a Futuro [Opzione [T]]
- 4. Aspetta il thread di blocco di Scala Futuro?
- 5. Quali sono le differenze tra un futuro di Scala e un futuro di Java
- 6. Ottenere un risultato nel futuro?
- 7. Futuro che non può fallire in Scala
- 8. Scala Futuro [Opzione [T]] Un imballaggio
- 9. il futuro dell'obiettivo c?
- 10. Scala futuro con filtro per la comprensione
- 11. Conversione Metodo Scala @suspendable in un futuro
- 12. Futuro [Opzione [Futuro [Opzione [Booleano]] Semplificando Futures e Opzioni?
- 13. mittente all'interno di un futuro
- 14. Risolve il futuro codice problematico?
- 15. Futuro [O [A, B]] a Futuro [O [A, C]] utilizzando una funzione (B => Futuro [C])
- 16. Futuro e stabilità di IronPython
- 17. Attesa futuro dall'esecutore: Futuro non può essere utilizzato nell'espressione 'attendi'
- 18. Mappa l'eccezione di un futuro fallito
- 19. Futuro dell'audio JavaScript?
- 20. Attenzione: modificato in futuro
- 21. Un futuro per Dynamic Feature Runtime nel contesto di C#?
- 22. Il futuro dell'allineamento C++: passando per valore?
- 23. Converti scala 2.10 in futuro in scalaz.concurrent.Future // Task
- 24. Enum compatibile con il futuro in 2.7?
- 25. Come fermare timeout di un futuro
- 26. Angularjs è a prova di futuro?
- 27. passa il futuro a quandoReady fallisce
- 28. Qual è il futuro per Java 3D?
- 29. Futuro dell'API Cronologia delle posizioni di Google
- 30. Il futuro di .NET Development: ASP.NET o WPF/Silverlight/Winforms?
posso confermare questo sta ancora lavorando con Finagle 6.33.0. Grazie, @Odomontois. – marcospereira
Questo avvolge solo il risultato di un futuro scala in un futuro di Twitter. Quindi tutto ciò che invochi sul futuro restituito (come ad esempio cancella) non avrà alcun effetto. – rethab