3

ディスパッチドキュメントの最初の例に従っています-

    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)
  }
}
4

2 に答える 2

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

もちろん、実際のプログラムでは、これを行う必要はありません。

delay のもう 1 つのオプションはreadLine()、main の最後に単に a を追加することです。

于 2013-02-07T11:40:30.800 に答える
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プロンプトの後に表示されることに注意してください。

国はどこかに印刷されていませんでしたが、他の出力と混同されていたために気付かなかったのですか?

于 2013-02-07T11:27:19.447 に答える