fix(connectedDevice): 连接后等 SN 到位再绑定,拿不到 SN 时断开重置
- 连接成功后同时监听 deviceConnect 与 deviceInfo,两个信号都到位才调绑定接口,避免空 SN 绑定 - 15 秒超时仍拿不到 SN 时断开连接、清缓存、重置页面状态 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
4d39449a0d
commit
b4b2d2c7f3
@@ -34,6 +34,7 @@ let connectCleanup: {
|
|||||||
timer: number | null
|
timer: number | null
|
||||||
unsubState: (() => void) | null
|
unsubState: (() => void) | null
|
||||||
unsubConnect: (() => void) | null
|
unsubConnect: (() => void) | null
|
||||||
|
unsubInfo: (() => void) | null
|
||||||
} | null = null
|
} | null = null
|
||||||
/** 一次性防重入标记 */
|
/** 一次性防重入标记 */
|
||||||
let modalLocked = false
|
let modalLocked = false
|
||||||
@@ -169,6 +170,7 @@ Page({
|
|||||||
if (connectCleanup.timer !== null) clearTimeout(connectCleanup.timer)
|
if (connectCleanup.timer !== null) clearTimeout(connectCleanup.timer)
|
||||||
connectCleanup.unsubState?.()
|
connectCleanup.unsubState?.()
|
||||||
connectCleanup.unsubConnect?.()
|
connectCleanup.unsubConnect?.()
|
||||||
|
connectCleanup.unsubInfo?.()
|
||||||
connectCleanup = null
|
connectCleanup = null
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -305,19 +307,42 @@ Page({
|
|||||||
leFuService.connect(scanned.raw)
|
leFuService.connect(scanned.raw)
|
||||||
|
|
||||||
this._clearConnectCleanup()
|
this._clearConnectCleanup()
|
||||||
connectCleanup = { timer: null, unsubState: null, unsubConnect: null }
|
connectCleanup = { timer: null, unsubState: null, unsubConnect: null, unsubInfo: null }
|
||||||
|
|
||||||
const finish = () => {
|
const finish = () => {
|
||||||
if (connectCleanup?.timer !== null) clearTimeout(connectCleanup.timer)
|
if (connectCleanup?.timer !== null) clearTimeout(connectCleanup.timer)
|
||||||
connectCleanup?.unsubState?.()
|
connectCleanup?.unsubState?.()
|
||||||
connectCleanup?.unsubConnect?.()
|
connectCleanup?.unsubConnect?.()
|
||||||
|
connectCleanup?.unsubInfo?.()
|
||||||
connectCleanup = null
|
connectCleanup = null
|
||||||
wx.hideLoading()
|
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(() => {
|
connectCleanup.timer = setTimeout(() => {
|
||||||
finish()
|
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)
|
}, 15000)
|
||||||
|
|
||||||
connectCleanup.unsubState = leFuService.onConnectState((state) => {
|
connectCleanup.unsubState = leFuService.onConnectState((state) => {
|
||||||
@@ -331,13 +356,14 @@ Page({
|
|||||||
})
|
})
|
||||||
|
|
||||||
connectCleanup.unsubConnect = leFuService.onDeviceConnect(() => {
|
connectCleanup.unsubConnect = leFuService.onDeviceConnect(() => {
|
||||||
finish()
|
connected = true
|
||||||
const sn = leFuService.deviceInfo?.serialNumber
|
sn = leFuService.deviceInfo?.serialNumber
|
||||||
// 手动/自动连接:绑定设备成功后缓存设备并跳配网
|
tryBind()
|
||||||
this._bindDevice(sn ?? '', () => {
|
})
|
||||||
wx.setStorageSync('connectDeviceInfo', { ...scanned.raw, scaleDeviceName: scanned.raw.name })
|
|
||||||
wx.navigateTo({ url: '/pages/connectedWifi/connectedWifi' })
|
connectCleanup.unsubInfo = leFuService.onDeviceInfo((info) => {
|
||||||
})
|
sn = info?.serialNumber
|
||||||
|
tryBind()
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user