callback函数socket.io + node.js

有一个客户端和服务器端代码:

客户:

socket.on('connect', function() { showSystemMessage('Connected.'); socket.emit('setuser', wm, function(data){ console.log(data); socket.emit('whoisonline', wm, function(data){ getOnlineFriends(data); }); }); }); 

服务器:

 io.on('connection', function(socket) { socket.on('setuser', function (data, cb) { cb(data); }); }); 

我收到错误:

TypeError:undefined不是第18行的函数

18号线:

 socket.on('setuser', function (data, cb) { cb(data); // Line 18 }); 

然后我尝试了你的解决scheme,我得到了:

 TypeError: undefined is not a function in line 35 socket.on('whoisonline', function (data, cb) { redis.sinter('user.friend:' + data.id, 'onlineusers', function(error, intersection) { friends.online = intersection; friends.total = intersection.length; if(friends.total > 0){ intersection.forEach(function(entry) { var socketid = clients[entry]; io.sockets.connected[socketid].emit('in', { id : data.id, total : friends.total }); }); } cb(friends); // Line 35 }); }); 

Socket.io不能使用callback,你必须使用.emit()和.on()。 在这种情况下,您的源代码将如下所示:

客户:

 socket.on('connect', function() { showSystemMessage('Connected.'); socket.emit('setuser', wm); socket.on("setuser", function(data){ console.log(data); socket.emit('whoisonline', wm); socket.on("whoisonline", function(data) { getOnlineFriends(data); }); }); }); 

服务器:

 io.on('connection', function(socket) { socket.on('setuser', function (data) { socket.emit("setuser", data); }); });