1
我想第一次使用WebSockets,并且正在制作待办事项列表应用程序。我正在使用Express和Socket.io和Redis。如何在较低级别的回调中使用变量?
在以下代码中,socket.emit('items',{items:redisItems})失败,表示无法对undefined进行发射。我知道client.hgetall是一个异步调用,我不得不以某种方式让它执行后。我如何解决它?我是否使用Futures这样的产品,或者可以通过对我现在的产品进行一些小修补来完成这项工作?
io.sockets.on('connection', function (socket) {
socket.on('getItems', function (socket){
var redisItems = new Array;
callback = function(err,obj){
for (att in obj) {
item = new Object();
item.key = att;
item.done = obj[att];
redisItems.push(item);
console.log(redisItems.length);
console.log(item.key);
}
socket.emit('items', {items: redisItems})
};
client.hgetall("items", callback);
});
});
旁注:我现在有是这样的:1)浏览器请求2页)一旦浏览器拥有的页面,它连接通过WebSocket的,并要求对待办事项(SO 2个请求)。在未来,我更喜欢像1)浏览器请求页面2)服务器给页面和发送项目一旦完成。