diff --git a/miniprogram/pages/connectedDevice/connectedDevice.ts b/miniprogram/pages/connectedDevice/connectedDevice.ts index 7094ef4..115c968 100644 --- a/miniprogram/pages/connectedDevice/connectedDevice.ts +++ b/miniprogram/pages/connectedDevice/connectedDevice.ts @@ -34,6 +34,7 @@ let connectCleanup: { timer: number | null unsubState: (() => void) | null unsubConnect: (() => void) | null + unsubInfo: (() => void) | null } | null = null /** 一次性防重入标记 */ let modalLocked = false @@ -169,6 +170,7 @@ Page({ if (connectCleanup.timer !== null) clearTimeout(connectCleanup.timer) connectCleanup.unsubState?.() connectCleanup.unsubConnect?.() + connectCleanup.unsubInfo?.() connectCleanup = null }, @@ -305,19 +307,42 @@ Page({ leFuService.connect(scanned.raw) this._clearConnectCleanup() - connectCleanup = { timer: null, unsubState: null, unsubConnect: null } + connectCleanup = { timer: null, unsubState: null, unsubConnect: null, unsubInfo: null } const finish = () => { if (connectCleanup?.timer !== null) clearTimeout(connectCleanup.timer) connectCleanup?.unsubState?.() connectCleanup?.unsubConnect?.() + connectCleanup?.unsubInfo?.() connectCleanup = null wx.hideLoading() } + // 连接成功 + SN 到位两个信号都满足才调接口,各自事件独立触发、顺序不定 + let connected = false + let sn: string | undefined + const tryBind = () => { + if (!connected || !sn) return + finish() + // 手动/自动连接:绑定设备成功后缓存设备并跳配网 + this._bindDevice(sn, () => { + wx.setStorageSync('connectDeviceInfo', { ...scanned.raw, scaleDeviceName: scanned.raw.name }) + wx.navigateTo({ url: '/pages/connectedWifi/connectedWifi' }) + }) + } + connectCleanup.timer = setTimeout(() => { finish() - wx.showToast({ title: '连接超时', icon: 'none' }) + if (connected) { + // 已连上但一直没拿到 SN:断开并重置,避免设备残留占用连接 + leFuService.disconnect() + wx.removeStorageSync('connectDeviceInfo') + scannedDevices = [] + this.setData({ status: 'idle', deviceList: [] }) + wx.showToast({ title: '设备信息异常,请重试', icon: 'none' }) + } else { + wx.showToast({ title: '连接超时', icon: 'none' }) + } }, 15000) connectCleanup.unsubState = leFuService.onConnectState((state) => { @@ -331,13 +356,14 @@ Page({ }) connectCleanup.unsubConnect = leFuService.onDeviceConnect(() => { - finish() - const sn = leFuService.deviceInfo?.serialNumber - // 手动/自动连接:绑定设备成功后缓存设备并跳配网 - this._bindDevice(sn ?? '', () => { - wx.setStorageSync('connectDeviceInfo', { ...scanned.raw, scaleDeviceName: scanned.raw.name }) - wx.navigateTo({ url: '/pages/connectedWifi/connectedWifi' }) - }) + connected = true + sn = leFuService.deviceInfo?.serialNumber + tryBind() + }) + + connectCleanup.unsubInfo = leFuService.onDeviceInfo((info) => { + sn = info?.serialNumber + tryBind() }) },