scala - 调度示例不起作用

时间:2013-02-07 11:13:01

标签: scala scala-dispatch

我正在关注dispatch文档中的第一个示例 -

    val svc = url("http://api.hostip.info/country.php")
    val country = Http(svc OK as.String)
    for (c <- country)
      println(c)

我没有打印任何输出。当我将其更改为下面以进行阻塞调用时,我得到输出。

val res = country()
println(res)

需要帮助。

完整计划 -

import dispatch._
object DispatchTest {

  def main(args: Array[String]) {
    val svc = url("http://api.hostip.info/country.php")
    val country = Http(svc OK as.String)
    for (c <- country)
      println(c)
  }
}

2 个答案:

答案 0 :(得分:6)

嗯,这里不确定,但也许问题是你的主线程完成得那么快,后台线程(Dispatch异步工作)没时间采取行动?

要检查这一点,您可以尝试插入延迟:

for (c <- country) // Here we spawn a background thread!
  println(c)

Thread.sleep(500) // So let's wait half a second for it to work

当然,在实际程序中,你永远不需要这样做。

延迟的另一个选择是在main的末尾只有一个readLine()

答案 1 :(得分:0)

它在这里工作:

scala> import dispatch._
import dispatch._

scala> val svc = url("http://api.hostip.info/country.php")
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
svc: com.ning.http.client.RequestBuilder = com.ning.http.client.RequestBuilder@2f823290

scala> val country = Http(svc OK as.String)
country: dispatch.Promise[String] = Promise(-incomplete-)

scala> for (c <- country)
     |   println(c)

scala> BR

请注意提示后出现的BR

你确定这个国家没有印在某个地方,但你没有注意到,因为它与其他产品混在一起了吗?