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)服務器給頁面和發送項目一旦完成。