首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Scala未来转化为Twitter未来

将Scala未来转化为Twitter未来
EN

Stack Overflow用户
提问于 2015-05-19 05:33:39
回答 3查看 6.7K关注 0票数 9

我使用Finagle作为web服务器,我想从我的应用程序逻辑中返回服务器。当然,如何以非阻塞的方式将scala.concurrent.Future转换为com.twitter.util.Future?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-19 06:45:00

没有足够的环境来测试这一点,但是下面是我为"com.twitter" %% "finagle-http" % "6.25.0"编写的

代码语言:javascript
复制
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
  }
}
票数 21
EN

Stack Overflow用户

发布于 2015-05-20 15:29:15

还可以使用Twitter双射库:https://github.com/twitter/bijection

com.twitter.bijection.twitter_util.UtilBijections (util/UtilBijections.scala)

这个库处理重要的细节,例如,如果您前后转换对象,它只是打开原始对象。

票数 15
EN

Stack Overflow用户

发布于 2016-09-01 19:45:26

下面是一个使用twitter双射库的示例:

代码语言:javascript
复制
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]]
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30317473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档