fix(socket): 修复 Socket 初始化顺序导致的事件监听丢失
- 添加 pendingListeners 队列暂存早期注册的事件监听器 - on() 方法在 socket 未初始化时将监听器加入队列 - connect() 方法初始化后自动注册所有暂存的监听器 解决 NotificationContext 在 socket.connect() 之前调用 socket.on() 导致的监听器丢失问题。 🔧 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -16,6 +16,7 @@ class SocketService {
|
||||
this.reconnectAttempts = 0;
|
||||
this.maxReconnectAttempts = Infinity; // 无限重试
|
||||
this.customReconnectTimer = null; // 自定义重连定时器
|
||||
this.pendingListeners = []; // 暂存等待注册的事件监听器
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -50,6 +51,15 @@ class SocketService {
|
||||
...options,
|
||||
});
|
||||
|
||||
// 注册所有暂存的事件监听器
|
||||
if (this.pendingListeners.length > 0) {
|
||||
console.log(`[socketService] 📦 注册 ${this.pendingListeners.length} 个暂存的事件监听器`);
|
||||
this.pendingListeners.forEach(({ event, callback }) => {
|
||||
this.on(event, callback);
|
||||
});
|
||||
this.pendingListeners = []; // 清空暂存队列
|
||||
}
|
||||
|
||||
// 监听连接成功
|
||||
this.socket.on('connect', () => {
|
||||
this.connected = true;
|
||||
@@ -147,8 +157,10 @@ class SocketService {
|
||||
*/
|
||||
on(event, callback) {
|
||||
if (!this.socket) {
|
||||
logger.warn('socketService', 'Cannot listen to event: socket not initialized', { event });
|
||||
console.warn(`[socketService] ❌ 无法监听事件 ${event}: Socket 未初始化`);
|
||||
// Socket 未初始化,暂存监听器
|
||||
logger.info('socketService', 'Socket not ready, queuing listener', { event });
|
||||
console.log(`[socketService] 📦 Socket 未初始化,暂存事件监听器: ${event}`);
|
||||
this.pendingListeners.push({ event, callback });
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user