mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-01-01 13:20:41 +01:00
fix: socket.io methods calling callbacks twice if method returns promise
This commit is contained in:
@@ -131,7 +131,6 @@ function onMessage(socket, payload) {
|
||||
return socket.disconnect();
|
||||
}
|
||||
|
||||
var cbCalled = false;
|
||||
async.waterfall([
|
||||
function (next) {
|
||||
checkMaintenance(socket, next);
|
||||
@@ -147,19 +146,20 @@ function onMessage(socket, payload) {
|
||||
}
|
||||
},
|
||||
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') {
|
||||
returned.then((payload) => {
|
||||
next(null, payload);
|
||||
nextOnce(null, payload);
|
||||
}, next);
|
||||
}
|
||||
},
|
||||
], function (err, result) {
|
||||
if (cbCalled) {
|
||||
return;
|
||||
}
|
||||
|
||||
cbCalled = true;
|
||||
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) {
|
||||
var socketUser = require('../src/socket.io/user');
|
||||
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;
|
||||
it('should create a user', function (done) {
|
||||
socketAdmin.user.createUser({ uid: adminUid }, { username: 'foo1' }, function (err, _uid) {
|
||||
|
||||
Reference in New Issue
Block a user