From 703470ad82fd01e7f3b2197ebb7eb1b5b37975f8 Mon Sep 17 00:00:00 2001 From: Matheus Marchini Date: Mon, 2 Dec 2019 10:36:08 -0800 Subject: [PATCH] feat(chain): use nextTick instead of setImmediate (#1808) --- lib/chain.js | 4 +++- test/request.test.js | 8 ++++---- test/server.test.js | 14 +++++++------- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/lib/chain.js b/lib/chain.js index d710c8c5d..9bf718fa7 100644 --- a/lib/chain.js +++ b/lib/chain.js @@ -112,7 +112,9 @@ Chain.prototype.run = function run(req, res, done) { // all done or request closed if (!handler || req.closed()) { - setImmediate(done, err, req, res); + process.nextTick(function nextTick() { + return done(err, req, res); + }); return; } diff --git a/test/request.test.js b/test/request.test.js index aa40747cc..44764505f 100644 --- a/test/request.test.js +++ b/test/request.test.js @@ -227,15 +227,14 @@ test('should provide date when request started', function(t) { // restifyDone is emitted at the same time when server's after event is emitted, // you can find more comprehensive testing for `after` lives in server tests. test('should emit restifyDone event when request is fully served', function(t) { - var clientDone = false; + var restifyDoneCalled = false; SERVER.get('/', function(req, res, next) { req.on('restifyDone', function(route, err) { t.ifError(err); t.ok(route); setImmediate(function() { - t.ok(clientDone); - t.end(); + restifyDoneCalled = true; }); }); @@ -246,7 +245,8 @@ test('should emit restifyDone event when request is fully served', function(t) { CLIENT.get('/', function(err, _, res) { t.ifError(err); t.equal(res.statusCode, 200); - clientDone = true; + t.ok(restifyDoneCalled); + t.end(); }); }); diff --git a/test/server.test.js b/test/server.test.js index 4e7e3382d..ccf8ec0fa 100644 --- a/test/server.test.js +++ b/test/server.test.js @@ -1820,7 +1820,7 @@ test('calling next(false) should early exit from use handlers', function(t) { SERVER.on('after', function() { steps++; - t.equal(steps, 2); + t.equal(steps, 1); t.end(); }); @@ -2111,7 +2111,7 @@ test('should increment/decrement inflight request count', function(t) { CLIENT.get('/foo', function(err, _, res) { t.ifError(err); t.equal(res.statusCode, 200); - t.equal(SERVER.inflightRequests(), 1); + t.equal(SERVER.inflightRequests(), 0); }); }); @@ -2135,14 +2135,14 @@ test('should increment/decrement inflight request count for concurrent reqs', fu CLIENT.get('/foo1', function(err, _, res) { t.ifError(err); t.equal(res.statusCode, 200); - t.equal(SERVER.inflightRequests(), 1); + t.equal(SERVER.inflightRequests(), 0); t.end(); }); CLIENT.get('/foo2', function(err, _, res) { t.ifError(err); t.equal(res.statusCode, 200); - t.equal(SERVER.inflightRequests(), 2); + t.equal(SERVER.inflightRequests(), 1); }); }); @@ -2174,7 +2174,7 @@ test('should cleanup inflight requests count for 404s', function(t) { CLIENT.get('/foo1', function(err, _, res) { t.ifError(err); t.equal(res.statusCode, 200); - t.equal(SERVER.inflightRequests(), 1); + t.equal(SERVER.inflightRequests(), 0); CLIENT.get('/doesnotexist', function(err2, _2, res2) { t.ok(err2); @@ -2219,7 +2219,7 @@ test('should cleanup inflight requests count for timeouts', function(t) { CLIENT.get('/foo2', function(err, _, res) { t.ifError(err); t.equal(res.statusCode, 200); - t.equal(SERVER.inflightRequests(), 2); + t.equal(SERVER.inflightRequests(), 1); }); }); @@ -2862,7 +2862,7 @@ test('inflightRequest accounting stable with firstChain', function(t) { for (var i = 0; i < results.length; i++) { // The shed request should always be returned first, since it isn't // handled by SERVER.get - if (i === 0) { + if (i === 1) { t.equal( results[i].statusCode, 413,