也许错过了javascript编码的技巧 - 变量处理(socket.io示例)

时间:2017-09-21 23:24:40

标签: javascript node.js sockets

我最终希望对编程的这一方面有所了解,基本上是自学成才。它与在函数之间传递变量有关。

使用下面的代码,第一个函数(显然)中无法识别data.roomId。我可以将函数放在joinRoom函数中以使其识别data.roomId,但是leaveRoom函数如何识别sendHeartbeat?

`io.on('connection', function (socket) {
    function sendHeartbeat(){
        setTimeout(sendHeartbeat, 8000);
        socket.broadcast.to(data.roomId).emit('ping', { beat : 1 });
    }
    socket.on('joinRoom', function (data) {
        socket.join(data.roomId)
        setTimeout(sendHeartbeat, 8000);
    });
    socket.on('leaveRoom', function (data) {
        socket.leave(data.roomId)
        clearTimeout(sendHeartbeat)
    });
});`

1 个答案:

答案 0 :(得分:1)

你可以做我们称之为闭包的函数,它是一个函数,它返回一个跟踪局部变量的函数。这是一个很酷的概念!

function sendHeartbeat(roomId){
    return function() {
        socket.broadcast.to(roomId).emit('ping', { beat : 1 });
    }
}
socket.on('joinRoom', function (data) {
    socket.join(data.roomId)
    setTimeout(sendHeartbeat(data.roomId), 8000);
});

你调用函数sendHeartbeat将它传递给roomId,并返回你想在setTimeout中执行的函数:)