app更新对l2数据显示
This commit is contained in:
@@ -13,6 +13,13 @@ export function createMeasureSocket({
|
||||
} = {}) {
|
||||
let socket = null
|
||||
let manualClose = false
|
||||
// 保存回调函数的引用,允许清空
|
||||
let callbacks = {
|
||||
onOpen,
|
||||
onClose,
|
||||
onError,
|
||||
onMessage
|
||||
}
|
||||
|
||||
const wsBase = (config.wsUrl || config.baseUrl || '').replace(/^http/, 'ws')
|
||||
const url = `${wsBase}/websocket?type=${type}`
|
||||
@@ -30,12 +37,12 @@ export function createMeasureSocket({
|
||||
},
|
||||
fail(err) {
|
||||
console.error('connectSocket 调用失败:', err)
|
||||
onError && onError(err)
|
||||
callbacks.onError && callbacks.onError(err)
|
||||
}
|
||||
})
|
||||
} catch (err) {
|
||||
console.error('connectSocket 执行异常(可能环境不支持 WebSocket):', err)
|
||||
onError && onError(err)
|
||||
callbacks.onError && callbacks.onError(err)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -47,24 +54,52 @@ export function createMeasureSocket({
|
||||
// 正确的事件注册方式:socketTask.onOpen / onMessage / onError / onClose
|
||||
socket.onOpen((res) => {
|
||||
console.log('WebSocket 已打开', res)
|
||||
onOpen && onOpen(res)
|
||||
// 检查回调是否已被清空
|
||||
if (callbacks && callbacks.onOpen) {
|
||||
try {
|
||||
callbacks.onOpen(res)
|
||||
} catch (e) {
|
||||
// 忽略回调错误
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
socket.onMessage((evt) => {
|
||||
// H5 为 evt.data,小程序为 evt.data,统一兼容
|
||||
const data = evt && (evt.data || evt)
|
||||
onMessage && onMessage(data)
|
||||
// 检查回调是否已被清空
|
||||
if (callbacks && callbacks.onMessage) {
|
||||
try {
|
||||
callbacks.onMessage(data)
|
||||
} catch (e) {
|
||||
// 忽略回调错误,可能是组件已销毁
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
socket.onError((err) => {
|
||||
console.error('WebSocket 发生错误:', err)
|
||||
onError && onError(err)
|
||||
// 检查回调是否已被清空
|
||||
if (callbacks && callbacks.onError) {
|
||||
try {
|
||||
callbacks.onError(err)
|
||||
} catch (e) {
|
||||
// 忽略回调错误
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
socket.onClose((evt) => {
|
||||
console.log('WebSocket 已关闭', evt)
|
||||
onClose && onClose(evt)
|
||||
if (!manualClose) {
|
||||
// 检查回调是否已被清空
|
||||
if (callbacks && callbacks.onClose) {
|
||||
try {
|
||||
callbacks.onClose(evt)
|
||||
} catch (e) {
|
||||
// 忽略回调错误
|
||||
}
|
||||
}
|
||||
if (!manualClose && callbacks) {
|
||||
setTimeout(connect, 3000)
|
||||
}
|
||||
})
|
||||
@@ -72,8 +107,19 @@ export function createMeasureSocket({
|
||||
|
||||
function close() {
|
||||
manualClose = true
|
||||
// 清空所有回调,防止在关闭过程中或关闭后触发回调
|
||||
callbacks = {
|
||||
onOpen: null,
|
||||
onClose: null,
|
||||
onError: null,
|
||||
onMessage: null
|
||||
}
|
||||
if (socket) {
|
||||
socket.close(1000, 'client close')
|
||||
try {
|
||||
socket.close(1000, 'client close')
|
||||
} catch (e) {
|
||||
// ignore
|
||||
}
|
||||
socket = null
|
||||
}
|
||||
}
|
||||
@@ -93,6 +139,16 @@ export function createMeasureSocket({
|
||||
})
|
||||
}
|
||||
|
||||
return { connect, close, send }
|
||||
// 清空回调函数的方法
|
||||
function clearCallbacks() {
|
||||
callbacks = {
|
||||
onOpen: null,
|
||||
onClose: null,
|
||||
onError: null,
|
||||
onMessage: null
|
||||
}
|
||||
}
|
||||
|
||||
return { connect, close, send, clearCallbacks }
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user