从http://backchatio.github.io/hookup/scaladoc/io/backchat/hookup/DefaultHookupClient.html获得此代码:
new DefaultHookupClient(HookupClientConfig(new URI("ws://localhost:8080/thesocket"))) {
def receive = {
case Disconnected(_) ⇒ println("The websocket to " + uri.toASCIIString + " disconnected.")
case TextMessage(message) ⇒ {
println("RECV: " + message)
send("ECHO: " + message)
}
}
connect() onSuccess {
case Success ⇒
println("The websocket is connected.")
case _ ⇒
}
}
client.scala中的
def connect(protocols: String*): Future[OperationResult] = synchronized {
…
257 delay {
258 connect(wireFormat.get.name)
259 }
260 }
261 }
OperationResult定义为(https://github.com/backchatio/hookup/blob/2913794eb45d90d65713c9fd631b427abcca2d05/src/main/scala/io/backchat/hookup/operation_result.scala):
sealed trait OperationResult {
11 /**
12 * Flag for the java api to indicate success
…
30 def children: java.util.List[OperationResult] = List[OperationResult]().asJava
31 }
在链式方法connect() onSuccess {
中,connect()
方法似乎会阻塞,直到调用onSuccess
为止?在https://github.com/backchatio/hookup/ onSuccess的源代码中似乎没有定义,所以这个方法链如何编译?
我希望onSuccess
在类似于:
abstract class DefaultHookupClient {
def onSuccess(): Unit
}
答案 0 :(得分:1)
请安装和使用IDE ... scala是没有IDE的PITA,即使没有IDE也是如此。
方法onSuccess
在Future trait in scala.concurent。
再次获得一个IDE。否则,你将进入一个真正非常令人沮丧的旅程。
答案 1 :(得分:1)
latest doc更清楚执行语义。
Since this method executes asynchronously...
不确定为什么你认为它会阻止。那将是邪恶的。
请注意,onSuccess
在2.12中已弃用。使用onComplete
代替处理所有情况,这是相同的想法:"在未来完成时运行副作用。不要打扰告诉我,我甚至不在乎。"