2015-05-19 14 views

risposta

18

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 
    } 
} 
+0

posso confermare questo sta ancora lavorando con Finagle 6.33.0. Grazie, @Odomontois. – marcospereira

+0

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

7

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]] 
} 
+0

Ho anche bisogno di importare un ExecutionContext 'import scala.concurrent.ExecutionContext.Implicits.global' – suicide

Problemi correlati