グローバルなwebsocket-referenceを作成しようとしていますが、後で自動的に再接続するためにその行を拡張したいと考えています。Scala.jsグローバルWebSocket - > InvalidStateError
しかし、私は、これは意図したとおりに機能しない理由を確認していないここではベビーの手順を実行:
val uri = s"ws://localhost:1337/websocket"
var websocket: Future[WebSocket] = initWebSocket()
def initWebSocket() : Future[WebSocket] = {
val ws = new WebSocket(uri)
ws.onopen =
{
(event: Event) => log("Websocket connection established")
}
ws.onmessage =
{
(event: MessageEvent) => log("Message received")
}
ws.onclose =
{
// TODO wait some seconds before trying to reconnect
(event: CloseEvent) =>
log("Close event received")
// this.websocket = new WebSocket(uri)
}
Future(ws)
}
私は(スケッチ)onclose
ものは絶対でたらめが今であることを完全に承知しています!
def main(): Unit = {
websocket.onComplete {
case Failure(x) => println("Epic fail!")
case Success(x) => {
x.send("Test")
}
}
}
私が得るすべては
scala.scalajs.js.JavaScriptException: InvalidStateError: An attempt was made to use an object that is not, or is no longer, usable
Websocket connection established
The connection to ws://localhost:1337/websocket was interrupted while the page was loading.
Close event received
され、私もなぜ不思議はありませんよ!
onopen
と呼ばれていますが、これをうまく解決するにはどうすればよいですか?私は基本的にはws.onopen
がwebsocketを返す前に呼び出されたことを確認する必要があります。私はブロックするのではなく、代わりにいくつかを使用することを好むでしょうPromise
またはFuture
完璧な感謝をします、ありがとう! – Sorona