解决方案:初始化ws连接写在App.js的onShow方法里,onHide里断开ws连接,并把socketTask初始化为空。
// App.js sockTask: null, onShow() { this.initWs() }, onHide() { this.sockTask && this.sockTask.close() this.sockTask = null }, initWs() { let that = this let ws = wx.connectSocket({url: '这里是ws地址'}) ws.onOpen(() => { // 给socketTask赋值需要在ws onOpen里 that.sockTask = ws that.onMessage(e => { // 解决重复进入同一页面,onMessage会多次执行的问题 let pages = getCurrentPages() let currentPage = pages[pages.length - 1] // 当前页面 if (currentPage.onMessage) currentPage.onMessage(e) }) }) }
// page.js onMessage(e) { // 这里就能拿到ws收到的消息了 }