throw error if Request.request called more than once

This commit is contained in:
Ivan Tivonenko
2015-09-30 06:29:07 +03:00
parent 2f432cef62
commit 60e2d10775
2 changed files with 14 additions and 9 deletions

View File

@@ -43,16 +43,19 @@ Request.prototype.request = function(servers, callback_) {
const self = this; const self = this;
const callback = typeof servers === 'function' ? servers : callback_; const callback = typeof servers === 'function' ? servers : callback_;
if (this.requested) {
throw new Error('Already requested');
}
this.emit('before'); this.emit('before');
// emit handler can set requested flag
const wasRequested = this.requested; if (this.requested) {
this.requested = true;
this.callback(callback);
if (wasRequested) {
return this; return this;
} }
this.requested = true;
this.callback(callback);
this.on('error', function() {}); this.on('error', function() {});
this.emit('request', this.remote); this.emit('request', this.remote);

View File

@@ -40,13 +40,12 @@ const SERVER_INFO = {
}; };
describe('Request', function() { describe('Request', function() {
it('Send request', function(done) { it('Send request', function() {
const remote = { const remote = {
request: function(req) { request: function(req) {
assert(req instanceof Request); assert(req instanceof Request);
assert.strictEqual(typeof req.message, 'object'); assert.strictEqual(typeof req.message, 'object');
assert.strictEqual(req.message.command, 'server_info'); assert.strictEqual(req.message.command, 'server_info');
done();
}, },
on: function() { on: function() {
}, },
@@ -60,7 +59,10 @@ describe('Request', function() {
request.request(); request.request();
// Should only request once // Should only request once
assert.throws(function() {
request.request(); request.request();
}, Error);
}); });
it('Send request -- filterRequest', function(done) { it('Send request -- filterRequest', function(done) {