上不存在属性“已连接”"/>
“命名空间<DefaultEventsMap, DefaultEventsMap, DefaultEventsMap, any>”类型上不存在属性“已连接”
当我尝试运行以下代码时:
const endMeeting = async (meeting_id: string, socket: Socket, meeting_server: Server, payload: any) => {
const { user_id } = payload.data;
broadcastUsers(meeting_id, socket, meeting_server, {
type: MeetingPayloadEnum.MEETING_ENDED,
data: { user_id }
});
let users: IUser[] = await Meetings.getAllMeetingUsers(toBinaryUUID(meeting_id));
for (let i = 0; i < users.length; i++) {
let user = users[i];
meeting_server.sockets.connected[user.socket_id].disconnect;
}
}
它在代码的最后一行给我这个错误信息:
属性“已连接”在类型上不存在 '命名空间
'.
似乎代码有点过时了,
socket.io
现在以另一种方式工作,但我不确定如何?我应该如何更新此代码?
回答如下:
最新版本的 Socket.IO 中的 Namespace 对象的 sockets 属性不再提供 connected 属性。相反,您可以使用 sockets.sockets 属性获取所有已连接套接字的映射,然后使用 get 方法通过其 ID 检索特定套接字。试试这个代码:
const endMeeting = async (meeting_id: string, socket: Socket, meeting_server:
Server, payload: any) => {
const { user_id } = payload.data;
broadcastUsers(meeting_id, socket, meeting_server, {
type: MeetingPayloadEnum.MEETING_ENDED,
data: { user_id }
});
let users: IUser[] = await
Meetings.getAllMeetingUsers(toBinaryUUID(meeting_id));
for (let i = 0; i < users.length; i++) {
let user = users[i];
meeting_server.sockets.sockets.get(user.socket_id)?.disconnect();
}
}
您可以使用可选的链接运算符 (?.) 来处理映射中不存在具有指定 ID 的套接字的情况(例如,如果用户已经断开连接)。
更多推荐
“命名空间<DefaultEventsMap, DefaultEventsMap, DefaultEventsMap, any>”类型上不存在属性“
发布评论