首页 > 解决方案 > 套接字未定义,如果未定义则发送不发送

问题描述

您好,我编写了以下函数来获取某人的套接字;

var getSocket = function(persId){
    var socketid = users[persId].socket;
    if(io.sockets.connected[socketid]){
        return io.sockets.connected[socketid];
    }
}

它们像这样被发射;

getSocket(372).emit({ ... });

现在,如果用户在发送套接字之前断开连接,则会导致未定义的套接字错误,这可能会导致问题。

有没有办法通过修改函数(无需检查if getSocket(372))使其不抛出错误?它现在正在引起问题。

谢谢!

标签: javascriptnode.jserror-handlingsocket.io

解决方案


你应该做的是使用socket.io功能,它已经检查过了。

io.to(room).emit()

在连接时,只需将用户加入一个名为372(我相信那是用户 ID)的房间,然后向它发出:

io.on('connection', socket => {

    const room = 372; // Get user id somehow
    socket.join(room);

});

// Somewhere
io.to(372).emit(..)

emit 回答您的具体问题,您可以使用nop方法返回一个对象。此外,您必须在访问之前检查用户是否存在.socket。您可以使用解构来做到这一点。

const { socket: socketId } = users[persId] || {};

完整的功能应该是:

const getSocket = function(persId){
    const { socket: socketId } = users[persId] || {};
    if(socketId && io.sockets.connected[socketId]){
        return io.sockets.connected[socketId];
    }

    return { emit: () => {} }
}

现在您不必进行检查,因为.emit它将永远存在。

getSocket(23123213).emit(); // Will no throw if 23123213 doesn't exist

推荐阅读