diff --git a/src/core/request.js b/src/core/request.js index 239610df..93f2a08a 100644 --- a/src/core/request.js +++ b/src/core/request.js @@ -44,13 +44,15 @@ Request.prototype.request = function(servers, callback_) { const callback = typeof servers === 'function' ? servers : callback_; this.emit('before'); + + const wasRequested = this.requested; + this.requested = true; this.callback(callback); - if (this.requested) { + if (wasRequested) { return this; } - this.requested = true; this.on('error', function() {}); this.emit('request', this.remote); diff --git a/test/request-test.js b/test/request-test.js index 377aaefe..c1e1ee6b 100644 --- a/test/request-test.js +++ b/test/request-test.js @@ -1207,4 +1207,22 @@ describe('Request', function() { ] }); }); + + it('Emit "before" only once', function(done) { + const remote = new Remote(); + remote._connected = true; + + const request = new Request(remote, 'server_info'); + + let beforeCalled = 0; + + request.on('before', () => { + beforeCalled++; + }); + + request.request(function() {}); + assert.strictEqual(beforeCalled, 1); + done(); + }); + });