Is socket.io emit callback appropriate?

59.4k views Asked by At

Recently I have been messing around with socket.io and found this interesting thing, that I can have emit function callback like this.

I start emitting on client side like this:

client.emit('eventToEmit', dataToEmit, function(error, message){
    console.log(error);
    console.log(message);
});

Then I can fire a callback from server-side like this:

client.on('eventToEmit', function(data, callback){
    console.log(data);
    callback('error', 'message');
});

Everything works fine with no errors, but I am interested if doing something like this is appropriate since I have not seen anything similar in the documentation or any example so far.

2

There are 2 answers

8
robertklep On BEST ANSWER

It's perfectly legal.

Those callbacks are called 'acknowledgement functions' and are summarily mentioned in the Wiki and described a bit more in detail on the NPM page ('Getting acknowledgements').

EDIT: more recent documentation can be found here.

0
Lauchie Harvey On

According to the socket.emit() documentation, the acknowledgement functions (callbacks) must be the last parameters to the socket.emit() call. I was running into an issue where the callback was null in the server code.
Make sure the callback(s) is/are the last argument to socket.emit()

e.g.

// correct
socket.emit('eventname', arg1, arg2, callback);

// incorrect
socket.emit('eventname', arg1, callback, arg2);