Javascript 如何在低级回调中使用变量?
我第一次尝试使用WebSocket,我正在制作一个待办事项列表应用程序。我正在使用Express、Socket.io和Redis 在下面的代码中,socket.emit('items',{items:redisItems})失败,表示无法对未定义的对象执行emit。我知道client.hgetall是一个异步调用,我必须以某种方式让它在之后执行。我怎么修理它?我是用期货之类的东西,还是可以在我现在拥有的东西上稍加修改Javascript 如何在低级回调中使用变量?,javascript,node.js,Javascript,Node.js,我第一次尝试使用WebSocket,我正在制作一个待办事项列表应用程序。我正在使用Express、Socket.io和Redis 在下面的代码中,socket.emit('items',{items:redisItems})失败,表示无法对未定义的对象执行emit。我知道client.hgetall是一个异步调用,我必须以某种方式让它在之后执行。我怎么修理它?我是用期货之类的东西,还是可以在我现在拥有的东西上稍加修改 io.sockets.on('connection', function (s
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连接并请求todo项目(因此2个请求)。
在将来,我更喜欢1)浏览器请求页面2)服务器提供页面并在完成后发送项目。您正在覆盖
getItems
回调中的套接字对象。最初的io.sockets
连接事件返回socket
,而随后的socket.on
事件不返回另一个socket
对象,它们返回事件的数据。尝试以下方法:
io.sockets.on('connection', function (socket) {
socket.on('getItems', function (data){
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);
});
});
您正在覆盖
getItems
回调中的套接字对象。最初的io.sockets
连接事件返回socket
,而随后的socket.on
事件不返回另一个socket
对象,它们返回事件的数据。尝试以下方法:
io.sockets.on('connection', function (socket) {
socket.on('getItems', function (data){
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);
});
});