Scala - 如何在 http 请求中不使用未来
Posted
技术标签:
【中文标题】Scala - 如何在 http 请求中不使用未来【英文标题】:Scala - how to not use a future in http request 【发布时间】:2015-01-13 12:05:16 【问题描述】:我正在关注这个使用调度库的 HTTP 请求的简单示例。
Dispatch tutorial
我想在不使用期货的情况下提出请求。我想等待回复。我怎样才能做到这一点?
我已经尝试通过删除未来声明和oncomplete
。
谢谢
import dispatch._, Defaults._
import scala.util.Success, Failure
object DispatchTest
def main (args: Array[String])
val svc = url("http://www.wikipedia.org/");
val response : Future[String] = Http(svc OK as.String)
response onComplete
case Success(content) =>
println("Successful response" + content)
case Failure(t) =>
println("An error has occurred: " + t.getMessage)
import dispatch._, Defaults._
import scala.util.Success, Failure
object DispatchTest
def main (args: Array[String])
val svc = url("http://www.wikipedia.org/");
val response : String = Http(svc OK as.String)
【问题讨论】:
如果 Dispatch API 没有提供,您可以使用Await.result(...)
或 Await.ready(...)
等待完成 - 两者都在 scala.concurrent.Await
中找到。然而,这不是线程的最佳用途,因为您正在创建一个线程块来等待结果。
【参考方案1】:
这应该是你需要的:阻塞当前线程直到响应返回。
import dispatch._
object DispatchBlocking extends App
val q = url("http://www.scala-lang.org/")
val r = Http(q OK as.String)()
println(r)
【讨论】:
^ 是的。你需要 .apply() 未来。 谢谢@Michal Ostruszka。我在val r = Http(q OK as.String)()
上收到错误unspecified value parameter executor
。还有空括号 () 是什么意思?谢谢
试试val r = Http(q OK as.String) ; println( r() )
。括号是 Dispatch 的特色。这是Await.Result( myFuture,forever)
的简写
您使用哪个调度版本?以上是关于Scala - 如何在 http 请求中不使用未来的主要内容,如果未能解决你的问题,请参考以下文章
使用 curry howard 能够静态地确保两种类型在 scala 中不相等
如何使用Scala / Akka Http处理多个HTTP头