套接字未定义,如果未定义,则发送不发送

时间:2018-07-21 21:49:28

标签: javascript node.js error-handling socket.io

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

x86_64

它们像这样被发射出去

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

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

有什么办法修改功能(而不必检查getSocket(372).emit({ ... }); )以使其不抛出错误?现在正在引起问题。

谢谢!

1 个答案:

答案 0 :(得分:1)

您应该使用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