微信小程序websocket重复进入页面,onmessage重复执行?
我使用es6语法暴露一个连接类,然后app.js实例化该连接类,获取wx.connectsocket接口函数的返回值socketTask,将它存储在全局实例app的connectobj属性中实现所有页面共享一个websocket连接,然后直接在页面中使用connectobj调用onmessage监听消息,重复进入后重复执行这个监听函数,导致收到的消息重复写入,请问有什么解决办法么?能不能通过判断onmessage函数是否在执行来解决?如果可以,怎么判断?感谢大佬指点!
2 回复
我觉得你可能思路有问题,onmessage应该只设置一次,一个connectobj本来就一直在并没有销毁,你多设置当然就多次触发了,所以可以把onmessage的设置也放到app中,再用回调触发。
// 方案一:
// app.js
App({
onLaunch: function () {
var connectobj = wx.connectSocket({
url: 'ws://xxx:xxxx'
});
connectobj.onMessage((data) => {
var pages = getCurrentPages();
var currentPage = pages[pages.length - 1]; //当前页面
if (currentPage.onMessage) currentPage.onMessage(data);
});
}
})
// page.js
page({
data: {
sData: {}
},
onLoad: function () {
},
onMessage: function (data) {
this.setData({ sData: data });
}
})
// 方案二:
// app.js
App({
onLaunch: function () {
var connectobj = wx.connectSocket({
url: 'ws://xxx:xxxx'
});
connectobj.onMessage((data) => {
if (this.onMessage) this.onMessage(data);
});
}
})
// page.js
const app = getApp();
page({
data: {
sData: {}
},
onLoad: function () {
app.onMessage = (data) => {
this.setData({ sData: data });
}
},
onUnload: function () {
app.onMessage = null;
}
})