mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-06-22 19:50:49 +02: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();
|
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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user