[英]scala - dispatch example not working
我正在关注调度文档中的第一个示例 -
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)
}
}
嗯,这里不太确定,但也许问题是你的主线程完成得如此之快,后台线程(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()
。
它在这里工作:
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
。
你确定这个国家没有印在某个地方,但你没有注意到因为它与其他输出相混淆了吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.