Skip to content

Commit 991eb0b

Browse files
fix: ensure buffered events are sent in order
Before this commit, an event sent in the "connect" handler could be sent before the events that were buffered while disconnected. ```js socket.on("connect", () => { socket.emit("bar"); }); socket.emit("foo"); // buffered while disconnected ``` In the example above, the "bar" event was sent first, which is not correct. Related: #1458 Backported from 34f822f
1 parent b1d7eef commit 991eb0b

File tree

3 files changed

+25
-1
lines changed

3 files changed

+25
-1
lines changed

lib/socket.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,8 +332,8 @@ Socket.prototype.onack = function (packet) {
332332
Socket.prototype.onconnect = function () {
333333
this.connected = true;
334334
this.disconnected = false;
335-
this.emit('connect');
336335
this.emitBuffered();
336+
this.emit('connect');
337337
};
338338

339339
/**

test/socket.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,4 +176,24 @@ describe('socket', function () {
176176
done();
177177
});
178178
});
179+
180+
it('should emit events in order', function (done) {
181+
var socket = io('/', { autoConnect: false });
182+
var i = 0;
183+
184+
socket.on('connect', function () {
185+
socket.emit('echo', 'second', function () {
186+
expect(++i).to.eql(2);
187+
188+
socket.disconnect();
189+
done();
190+
});
191+
});
192+
193+
socket.emit('echo', 'first', function () {
194+
expect(++i).to.eql(1);
195+
});
196+
197+
socket.connect();
198+
});
179199
});

test/support/server.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ server.on('connection', function (socket) {
4040
socket.emit('hi');
4141
});
4242

43+
socket.on('echo', function (arg, callback) {
44+
callback(arg);
45+
});
46+
4347
// ack tests
4448
socket.on('ack', function () {
4549
socket.emit('ack', function (a, b) {

0 commit comments

Comments
 (0)