Javascript 如何在setInterval方法中获取更新的会话变量

Javascript 如何在setInterval方法中获取更新的会话变量,javascript,session,socket.io,setinterval,Javascript,Session,Socket.io,Setinterval,我将当前连接的socketID存储在会话中,因此我始终知道连接的客户端的当前socketID,即使它们刷新页面。现在我有一个计时器,当计时器结束时,我想记录当前的socketID,如果我在计时器结束前刷新页面,我想记录新的ID 要在express和socket.io之间共享会话,我使用express-socket.io-session,以便在socket.io连接中编辑会话。 每次连接后,我都会在会话中保存或更新客户端的当前socketID。我使用mongoDB在本地存储会话。 这对我来说很好。

我将当前连接的socketID存储在会话中,因此我始终知道连接的客户端的当前socketID,即使它们刷新页面。现在我有一个计时器,当计时器结束时,我想记录当前的socketID,如果我在计时器结束前刷新页面,我想记录新的ID

要在express和socket.io之间共享会话,我使用express-socket.io-session,以便在socket.io连接中编辑会话。 每次连接后,我都会在会话中保存或更新客户端的当前socketID。我使用mongoDB在本地存储会话。 这对我来说很好。但是,如果我在计时器仍在运行时刷新页面,它将不起作用

io.on('connection', (socket) => {
    // save or update socketID after every new connection
    const sID = socket.id;
    socket.handshake.session.sID = sID;
    socket.handshake.session.save(); //current socketID saved in session
    console.log('Current sID: ' + socket.handshake.session.sID); 

    function time() {
        var sec = 10;
        console.log('Timer started');
        var timer = setInterval(function() {
            if(sec == 0) {
                console.log('Current sID: ' + socket.handshake.session.sID);
                clearInterval(timer);
            }
            sec--;
        }, 1000); 
    }

    socket.on('startTimer', () => {
        time();
    });
}

正如您所看到的,当我启动计时器而不执行任何操作时,它只是按照预期记录存储的socketID。但是,如果我在计时器仍在运行时刷新页面,它不会记录新ID,即使新ID已在会话中更新。它记录了我启动计时器并刷新页面之前套接字的ID。是不是有范围?希望有一个简单的答案

搜索“socket.handshake.session not update”并找到:添加了这个:
socket.handshake.session.reload(函数(err){console.log(socket.handshake.session.sID);})编码到我的if语句中。现在它正在工作。仍然不知道为什么handshake.session没有在setInterval内更新,但非常感谢您的提示:)如果它不起作用,为什么不使用此解决方法?用
sID
替换
socket.handshake.session.sID
?我刚读了你的更新评论,没问题,很高兴它有用:)(附言:我现在也不知道为什么它不工作,实际上我对socket.io不太熟悉,只是你说session没有更新,我搜索了一下。))搜索了很多,但可能是因为设置间隔,我没有找到解决方案。应该更广泛地搜索。无论如何,谢谢你的帮助。祝你今天愉快:)
Console:
// Start timer without refreshing
Current sID: 3IgL6yujje9axyYVAAAA // new connection
Timer started
Current sID: 3IgL6yujje9axyYVAAAA // stored ID
// session Store in Mongo
{
        "_id" : "HFmatIQpCQ9W-A0gGhr4wNUX_aau5Hun",
        "expires" : ISODate("2019-09-15T09:29:37.853Z"),
        "session" : "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},
\"sID\":\"3IgL6yujje9axyYVAAAA\"}"
} 
// Everything worked

// Start timer with refreshing
Timer started
Current sID: s7ih8Aa_JStYD0rJAAAB // new ID because of refresh
Current sID: 3IgL6yujje9axyYVAAAA // timer ends. Logs old ID
// session Store in Mongo with new ID
{
        "_id" : "HFmatIQpCQ9W-A0gGhr4wNUX_aau5Hun",
        "expires" : ISODate("2019-09-15T09:33:41.289Z"),
        "session" : "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},
\"sID\":\"s7ih8Aa_JStYD0rJAAAB\"}"
}
// New ID is stored, but got old ID