有一个客户端和服务器端代码:
客户端:
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
});
然后我尝试了你的解决方案,我得到了:
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
});
});
答案 0 :(得分:1)
Socket.io不能使用回调,你必须使用.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);
});
});
答案 1 :(得分:0)
就我而言,以下工作有效:
在服务器端
socket.on('setuser', (name, cb) => { cb(name); });
在客户端
socket.emit('setuser', 'user data', r => { console.log(r); });