未捕获的 DOMException:在访问可用变量时尝试使用不可用或不再可用的对象

Zep*_*sGT 3 javascript websocket local-storage

我正在编写一个与 websocket 服务器通信的客户端。目前,套接字服务器将生成的“令牌”发送给客户端,然后客户端将其设置为存储:

      localStorage.setItem('token', json.token);
Run Code Online (Sandbox Code Playgroud)

并重定向到下一页,该页面在加载时运行以下代码:

token = localStorage.getItem('token')


console.log(token)



socket.send(JSON.stringify({"type": "getplayerinfo", "token": token}));
Run Code Online (Sandbox Code Playgroud)

在执行 console.log(token) 时,我得到了令牌。但是,当通过套接字发送令牌时,我得到:

Uncaught DOMException: An attempt was made to use an object that is not, or is no longer, usable
Run Code Online (Sandbox Code Playgroud)

我已经调试了三天了,伤透了我的大脑。有小费吗?

小智 6

当您在连接完全连接到服务器之前尝试通过 Websocket 连接发送某些内容时,通常会发生这种情况。因此,您应该做的是当服务器发送连接信号时运行代码,您可以使用事件侦听器“open”。在你的情况下,这将是:

const socket = new Websocket(url);
socket.addEventListener("add", (ev) => {
  socket.send(JSON.stringify({"type": "getplayerinfo", "token": token}));
  });
Run Code Online (Sandbox Code Playgroud)