微信小程序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
没有贴代码,就无从查起。
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()
},
})