JavaScript, node.js wait for socket.on response before continuing

javascript, node.js, sockets, wait

Solution

If you are putting the `current_player` variable outside of the `on` callback in an attempt to `return` it, the alternative is to make your own function receive a callback

function getPlayer(onDone){
    socket.on('confirmauth', function(id, username, num, callback) {
        var current_player = new Player(username,id, num);
        onDone(current_player);
    });
}

And instead of doing

var player = getPlayer();
//...

You do

getPlayer(function(player){ 
    //...
});

It kind of sucks that the "callbackyness" is a bit infectious in Javascript but such is life until everyone starts using Generators instead.

Problem

I need to get information from the server on the client side. So on the server side I got this when a client first connect: ``` socket.on('adduser', function(username){ // misc code, where i set num_player and whatnot socket.emit('confirmauth', socket.id, socket.num_player, function(data){ console.log(data) }); // code } ``` and on the client side I got this: ``` var current_player; socket.on('confirmauth', function(id, username, num, callback) { current_player = new Player(username,id, num); console.log(current_player.id); // works console.log(current_player.num); //works callback('ok i got it'); }); console.log(current_player.id); //undefined console.log(current_player.num); //undefined ``` my problem is that outside of the socket on, the player is not defined. It seems that javascript doesn't wait for my socket on to retrieve data before carrying on. I tried to wrap socket.on in a $.when done, but it doesn't work. I tried to do a callback, but I think I may not have understood very well how it is supposed to work. So if one of you is willing to help me, I will be grateful Thank you for your answers.

Original source

Related problems