我正在关注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)
}
}
答案 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
。
你确定这个国家没有印在某个地方,但你没有注意到,因为它与其他产品混在一起了吗?