fix: socket.io methods calling callbacks twice if method returns promise

v1.18.x
Barış Soner Uşaklı 6 years ago
parent d43f5dcf4c
commit 44a3352003

@ -131,7 +131,6 @@ function onMessage(socket, payload) {
return socket.disconnect(); return socket.disconnect();
} }
var cbCalled = false;
async.waterfall([ async.waterfall([
function (next) { function (next) {
checkMaintenance(socket, next); checkMaintenance(socket, next);
@ -147,19 +146,20 @@ function onMessage(socket, payload) {
} }
}, },
function (next) { function (next) {
const returned = methodToCall(socket, params, next); let callbackCalled = false;
function nextOnce(err, res) {
if (callbackCalled) { return; }
callbackCalled = true;
next(err, res);
}
const returned = methodToCall(socket, params, nextOnce);
if (returned && typeof returned.then === 'function') { if (returned && typeof returned.then === 'function') {
returned.then((payload) => { returned.then((payload) => {
next(null, payload); nextOnce(null, payload);
}, next); }, next);
} }
}, },
], function (err, result) { ], function (err, result) {
if (cbCalled) {
return;
}
cbCalled = true;
callback(err ? { message: err.message } : null, result); callback(err ? { message: err.message } : null, result);
}); });
} }

@ -124,6 +124,14 @@ describe('socket.io', function () {
}); });
}); });
it('should get more unread topics', function (done) {
io.emit('topics.loadMoreSortedTopics', { after: 0, count: 10, direction: 1, sort: 'unread' }, function (err, result) {
assert.ifError(err);
console.log(result);
done();
});
});
it('should ban a user', function (done) { it('should ban a user', function (done) {
var socketUser = require('../src/socket.io/user'); var socketUser = require('../src/socket.io/user');
socketUser.banUsers({ uid: adminUid }, { uids: [regularUid], reason: 'spammer' }, function (err) { socketUser.banUsers({ uid: adminUid }, { uids: [regularUid], reason: 'spammer' }, function (err) {
@ -182,7 +190,7 @@ describe('socket.io', function () {
}); });
}); });
describe('create/delete', function () { describe('user create/delete', function () {
var uid; var uid;
it('should create a user', function (done) { it('should create a user', function (done) {
socketAdmin.user.createUser({ uid: adminUid }, { username: 'foo1' }, function (err, _uid) { socketAdmin.user.createUser({ uid: adminUid }, { username: 'foo1' }, function (err, _uid) {

Loading…
Cancel
Save