2014-11-06 8 views
1

Есть клиент и на стороне сервера код:функция обратного вызова 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 is not a function on line 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 
      }); 
     }); 

ответ

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); 
     }); 
}); 
+0

Хм, спасибо, кажется, работа, но я получаю обратный вызов againn после переписывания на ваш код. Отредактированный вопрос – AhmedFaud

+0

@AhmedFaud Заменить строку 35 на 'socket.emit (« whoisonline », friends);' –

Смежные вопросы