![]() |
引用: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处于未初化状态(可能是您还未登陆),无需关闭。"); } } |