重置NodeJS中的变量和异步编程

时间:2016-02-15 12:05:50

标签: node.js asynchronous redis socket.io

我正在使用nodeJS中的异步编程,并遇到了一个有趣的问题。

我的代码中有这样的内容:

// require modules
var clientDetails = {}; // Initialize the object at the top of the file.

io.use(authenticate) // a method which gets some user information from the database and assigns the socket ID to the user. clientDetails object gets the data here.

io.on('connection', socketIOConnection); // A method which calls some methods using promises to control the flow of the method calls and socket.on('disconnect') event.
redisClient.on('message', redisMessage); // An event for redis pub/sub 

function socketIOConnection(socket) {
    // a few method chain calls to control the async flow
    storeUserDetailsToRedis().then().then().then().then() 
    socket.on('disconnect', socketIODisconnect)

}

function socketIODisconnect() {
  // a few chain calls to control the async flow. 
  removeUserDetailsToRedis().then().then().then().then()
}

我正在寻找一种在套接字IO连接(或断开连接)事件结束后清除客户端详细信息对象的方法。或者换言之,所有的承诺都得到了解决。

目前,如果我尝试正常执行clientDetails = {},它将首先执行,并且应用程序将失败/具有未定义的数据。

我需要清除clientDetails对象,这样我就可以在每次页面刷新时都有一个新对象。在没有清除的情况下,它仍然保存旧数据并且会混淆我存储在那里的redis用户信息数据。

我在这个项目中使用套接字IO和Redis。

有没有人知道如何在保持异步控制的同时清空clientDetails对象?

1 个答案:

答案 0 :(得分:0)

我找到了解决这个问题的方法。我在socket本身上添加了clientDetails对象,而不是将它作为文件顶部的变量。现在我可以访问所有事件,但我必须将它作为参数添加到我的所有方法中。