收藏
回答

Cannot read property 'onOpen' of undefined?

微信小程序SocketTask连接的时候出现如下问题:

WAServiceMainContext.js:2 TypeError: Cannot read property 'onOpen' of undefined

    at Ge.initSocket (app.js? [sm]:47)

    at Ge.<anonymous> (WASubContext.js?t=wechat&s=1676115821793&v=2.19.4:2)

    at Ge.onShow (app.js? [sm]:106)

    at Ge.<anonymous> (WASubContext.js?t=wechat&s=1676115821793&v=2.19.4:2)

    at WASubContext.js?t=wechat&s=1676115821793&v=2.19.4:2

    at new Ge (WASubContext.js?t=wechat&s=1676115821793&v=2.19.4:2)

    at o.<anonymous> (WASubContext.js?t=wechat&s=1676115821793&v=2.19.4:2)

    at WASubContext.js?t=wechat&s=1676115821793&v=2.19.4:2

    at app.js? [sm]:5

    at C (wxmodule.patch.js?t=wechat&s=1676115821793&v=2.19.4:1)(env: Windows,mp,1.06.2301160; lib: 2.19.4)

errorReport @ WAServiceMainContext.js:2

thirdErrorReport @ WAServiceMainContext.js:2

(anonymous) @ WAServiceMainContext.js:2

(anonymous) @ WASubContext.js?t=wechat&s=1676115821793&v=2.19.4:2

onShow @ app.js? [sm]:106

(anonymous) @ WASubContext.js?t=wechat&s=1676115821793&v=2.19.4:2

(anonymous) @ WASubContext.js?t=wechat&s=1676115821793&v=2.19.4:2

Ge @ WASubContext.js?t=wechat&s=1676115821793&v=2.19.4:2

(anonymous) @ WASubContext.js?t=wechat&s=1676115821793&v=2.19.4:2

(anonymous) @ WASubContext.js?t=wechat&s=1676115821793&v=2.19.4:2

(anonymous) @ app.js? [sm]:5

C @ wxmodule.patch.js?t=wechat&s=1676115821793&v=2.19.4:1

(anonymous) @ VM1182:7

doWhenAllScriptLoaded @ VM1175:1160

scriptLoaded @ VM1175:1188

(anonymous) @ VM1175:1213

Promise.then (async)

(anonymous) @ VM1175:1234

(anonymous) @ VM1175:1238

loadScripts @ assubloader.js:1

async function (async)

loadScripts @ assubloader.js:1

loadAppResourceScripts @ assubloader.js:1

(anonymous) @ app-service.js:1

回答关注问题邀请回答
收藏

1 个回答

  • Jianbo
    Jianbo
    2023-02-12

    没有贴代码,就无从查起。

    2023-02-12
    有用
    回复 4
    • 5132
      5132
      2023-02-12
      //app.js


      App({


        webSocketInit() {


          let vm = this
          let token = ''
          let socketUrl = 'wxs://jiabin.jiabinssledu.website:8083/mqtt'


          // 建立 WebSocket 连接
          vm.socket = wx.connectSocket({
            url: socketUrl,
            header: {
              'content-type': '',
              'authorization': 'Bearer' + token,
              'x-wxapp-sockettype': '5132'
            },
            success(res) {
              console.log('WebSocket 连接成功: ', res)
            },
            fail(err) {
              console.log('WebSocket 连接失败: ', err)
            }
          })
          // onOpen
          vm.socket.onOpen((ret) => {
            console.log('打开 WebSocket 连接')
          })
          // onMessage
          vm.socket.onMessage((ret) => {
            if (ret.data == 'pong') {
              return;
            }
            let data = JSON.parse(ret.data)
            wx.showToast({
              title: data.message,
              icon: 'none',
              duration: 3000
            })
          })
          // onError
          vm.socket.onError((err) => {
            console.log('WebSocket 连接失败:', err)
          })
          // onClose
          vm.socket.onClose((ret) => {
            console.log('打开 WebSocket 连接:', ret)
          })
        },
        // send message
        send(msg) {
          const vm = this
          vm.socket.send({
            data: msg,
            success(res) {
              console.log('WebSocket 消息发送成功', res)
            },
            fail(err) {
              console.log('WebSocket 消息发送失败', err)
            }
          })
        },
        // 心跳,由客户端发起
        ping() {
          const vm = this
          let times = 0
          // 每10 秒钟由客户端发送一次心跳
          this.interval = setInterval(function () {
            if (vm.socket.readyState == 1) {
              vm.send('ping')
            } else if (vm.socket.readyState == 3) {
              times += 1
              // 超时重连,最多尝试10次
              if (times >= 10) {
                wx.showToast({
                  title: 'WebSocket 连接已断开~',
                  icon: 'none',
                  duration: 3000
                })
                clearInterval(vm.interval)
              }
              vm.reconnect()
            }
          }, 10000)
        },
        // WebSocket 断线重连
        reconnect() {
          const vm = this
          vm.webSocketInit()
        },


      })
      2023-02-12
      回复
    • 5132
      5132
      2023-02-12
      这是代码部分。
      2023-02-12
      回复
    • Jianbo
      Jianbo
      2023-02-12回复5132
      wx.connectSocket  返回的SocketTask对象是否正常?需要你自己多去调试发现问题。
      2023-02-12
      回复
    • 5132
      5132
      发表于移动端
      2023-02-12回复Jianbo
      好的,我试试。
      2023-02-12
      回复
登录 后发表内容