引用:921124136 发表于 2025-03-24 10:40 嗯嗯,这个版本的几个工程同步更新时贴错了地方,回归测试时也漏掉了这一个函数的用例测试,下个版本会更新到交付物里 |
引用:JackJiang 发表于 2025-03-22 10:51 用了这个就没红色bug爆出了 |
|
看到了,不小心复制粘贴时把uniapp的代码贴到了里面。 你把sdk里的这个方法,用我的这个版本覆盖一下再试试: /**
* 强制关闭本地WebSocket。
* 一旦调用本方法后,再次调用{[url=home.php?mod=space&uid=5196]@link[/url] #getLocalSocket()}将会返回一个全新的WebSocket对象引用。
*
* 本方法通常在两个场景下被调用:
* 1) 真正需要关闭WebSocket时(如所在的浏览器退出时);
* 2) 当调用者检测到网络发生变动后希望重置以便获得健康的WebSocket引用对象时。
*
* @param {boolean} silentClose true表示close前会清掉为此socket实例设置的各种回调,确保close时不会触发这些回调(比如:在
* 掉线重连场景下,close掉前一个旧的失效socket就不会错误地触发这些回调,而且还因为close是异步的,从而会引发一系列不可预测的行为)。
*/
closeLocalSocket(silentClose) {
let silentCloseTag = (silentClose?"silentClose="+silentClose:"silentClose=false");
if (wx.MBCore.debugEnabled())
wx.MBUtils.mblog_d(this.TAG, "正在closeLocalSocket()...");
let that = this;
let thatSocket = this.localSocket;
if (this.localSocket) {
try {
// close前会清掉为此socket实例设置的各种回调,确保close时不会触发这些回调(比如:在掉线重连场景下,close
// 掉前一个旧的失效socket就不会错误地触发这些回调,而且还因为close是异步的,从而会引发一系列不可预测的行为)
if(silentClose) {
thatSocket.onError(null);
thatSocket.onClose(null);
thatSocket.onOpen(null);
thatSocket.onMessage(null);
if (wx.MBCore.debugEnabled())
wx.MBUtils.mblog_d(this.TAG, "closeLocalSocket("+silentCloseTag+")时,清理socket上的回调函数完成.");
}
// 真正开始关闭socket了
thatSocket.close({
success: () =>{
wx.MBUtils.mblog_d(that.TAG, "closeLocalSocket("+silentCloseTag+"):success.");
},
fail: () =>{
wx.MBUtils.mblog_w(that.TAG, "closeLocalSocket("+silentCloseTag+"):fail!");
},
complete: ()=>{
wx.MBUtils.mblog_w(that.TAG, "closeLocalSocket("+silentCloseTag+"):complete。");
}
});
// 确保本次清理的socket实例是本方法初始时的那个实例(排除因异步等原因this.localSocket被重新设置后又在此被错误地置空,那就坑爹了)
if(Object.is(thatSocket, this.localSocket)){
this.localSocket = null;
}
} catch (e) {
wx.MBUtils.mblog_w(this.TAG, "在closeLocalSocket("+silentCloseTag+")方法中试图释放localSocket资源时:", e);
}
} else {
wx.MBUtils.mblog_d(this.TAG, "Socket处于未初化状态(可能是您还未登陆),无需关闭。");
}
} |