Jason2zi 2022-07-28 16:08 采纳率: 61.5%
浏览 99
已结题

调用Websocket对象报错

我在父级页面和子组件同时调用connectWs();就会报错Uncaught DOMException: An attempt was made to use an object that is not, or is no longer, usable,求分析报错的原因,非常感谢。
以下是public封装的方法

export default {
  install: function (Vue) {
    Vue.prototype.connectWs = function (subscribeArr) {
      if (typeof (WebSocket) == undefined) return
      if (ws == null || ws.readyState != 1) {
        let profitOld = "--", rateProfitOld = "--";
        ws = new WebSocket(store.state.wsUrl)
        store.state.ws = ws;
        ws.onopen = (ddd) => {
          ws.send(wsLoginBag(this.$md5, subscribeArr));
          wsInterval = setInterval(() => {
            ws.send(JSON.stringify({command: 3}))
          }, 6000)
        }
        if (localStorage.newPriceKey) {
          newPrice = JSON.parse(localStorage.newPriceKey)
        }
        ws.onmessage = (e) => {
          let data = JSON.parse(e.data);
          let body = data.body
          if (data.command == 11) {
            ws.send(wsChangeDestine(subscribeArr));
            return
          }
        ws.onerror = (err) => {
          clearInterval(this.wsInterval)
        }
        ws.onclose = (err) => {
          clearInterval(this.wsInterval)
        }
      } else {
        ws.send(wsChangeDestine(subscribeArr));
      }
    }


  • 写回答

1条回答 默认 最新

  • 不吐泡泡的咸鱼 2022-07-28 16:30
    关注

    尝试将else的条件换成else if(ws != null && ws.readyState == 1) 保证发送消息时,ws处于正确状态

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月5日
  • 已采纳回答 7月28日
  • 创建了问题 7月28日