“命名空间<DefaultEventsMap, DefaultEventsMap, DefaultEventsMap, any>”类型上不存在属性“已连接”

编程入门 行业动态 更新时间:2024-10-08 02:21:17

“命名空间<DefaultEventsMap, DefaultEventsMap, DefaultEventsMap, any>”类型<a href=https://www.elefans.com/category/jswz/34/1771095.html style=上不存在属性“已连接”"/>

“命名空间<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>”类型上不存在属性“

本文发布于:2024-05-30 06:47:45,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1770219.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:上不   属性   类型   空间   gt

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!