我正在使用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对象?
答案 0 :(得分:0)
我找到了解决这个问题的方法。我在socket本身上添加了clientDetails对象,而不是将它作为文件顶部的变量。现在我可以访问所有事件,但我必须将它作为参数添加到我的所有方法中。