Scala Play Controller 中的 Finagle 客户端
Finagle client in Scala Play Controller
我在我的控制器中使用 Finagle 客户端的方法(FinagleClient.longRunningComputation)
def alfa = Action.async(parse.json) { request =>
val response = FinagleClient.longRunningComputation(request.body )
response.map( rest => Ok("Got result: " + rest ))
}
我需要在我的 play Controller
中获取 com.twitter.util.Future 的结果
我尝试使用Returning futures,但是编译器return出现如下错误:
found : com.twitter.util.Future[play.api.mvc.Result]
required: scala.concurrent.Future[play.api.mvc.Result]
response.map(rest => Ok("Got result: " + rest))
我需要在游戏控制器中使用 com.twitter.util.Future
我该怎么做?
您必须转换为 scala.concurrent.Future
,您可以使用 Promise
。
像这样:
def alfa = Action.async(parse.json) { request =>
val p = Promise[Result]
val response = FinagleClient.longRunningComputation(request.body )
val twitterFuture = response.map( rest => Ok("Got result: " + rest ))
twitterFuture.onSuccess(p.success)
twitterFuture.onFailure(p.failure)
p.future
}
我们可以将其概括为将 com.twitter.util.Future[A]
隐式转换为 scala.concurrent.Future[A]
。
import com.twitter.util.{Future => TwitterFuture}
import scala.concurrent.{Future, Promise}
object TwitterConversions {
def twitter2Scala[A](f: TwitterFuture[A]): Future[A] = {
val p = Promise[A]
f.onSuccess(p.success)
f.onFailure(p.failure)
p.future
}
}
那么您需要在控制器中做的就是 import TwitterConversions._
(或您放入的任何包)。
我在我的控制器中使用 Finagle 客户端的方法(FinagleClient.longRunningComputation)
def alfa = Action.async(parse.json) { request =>
val response = FinagleClient.longRunningComputation(request.body )
response.map( rest => Ok("Got result: " + rest ))
}
我需要在我的 play Controller
中获取 com.twitter.util.Future 的结果我尝试使用Returning futures,但是编译器return出现如下错误:
found : com.twitter.util.Future[play.api.mvc.Result]
required: scala.concurrent.Future[play.api.mvc.Result]
response.map(rest => Ok("Got result: " + rest))
我需要在游戏控制器中使用 com.twitter.util.Future
我该怎么做?
您必须转换为 scala.concurrent.Future
,您可以使用 Promise
。
像这样:
def alfa = Action.async(parse.json) { request =>
val p = Promise[Result]
val response = FinagleClient.longRunningComputation(request.body )
val twitterFuture = response.map( rest => Ok("Got result: " + rest ))
twitterFuture.onSuccess(p.success)
twitterFuture.onFailure(p.failure)
p.future
}
我们可以将其概括为将 com.twitter.util.Future[A]
隐式转换为 scala.concurrent.Future[A]
。
import com.twitter.util.{Future => TwitterFuture}
import scala.concurrent.{Future, Promise}
object TwitterConversions {
def twitter2Scala[A](f: TwitterFuture[A]): Future[A] = {
val p = Promise[A]
f.onSuccess(p.success)
f.onFailure(p.failure)
p.future
}
}
那么您需要在控制器中做的就是 import TwitterConversions._
(或您放入的任何包)。