我最终希望对编程的这一方面有所了解,基本上是自学成才。它与在函数之间传递变量有关。
使用下面的代码,第一个函数(显然)中无法识别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)
});
});`
答案 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中执行的函数:)