diff --git a/lib/tasks/server/express-server.js b/lib/tasks/server/express-server.js index dfb14654ad..6753abc8a4 100644 --- a/lib/tasks/server/express-server.js +++ b/lib/tasks/server/express-server.js @@ -3,6 +3,7 @@ var path = require('path'); var EventEmitter = require('events').EventEmitter; var chalk = require('chalk'); +var _ = require('lodash-node'); var Promise = require('../../ext/promise'); var Task = require('../../models/task'); var SilentError = require('../../errors/silent'); @@ -14,7 +15,11 @@ module.exports = Task.extend({ this.emitter = new EventEmitter(); this.express = this.express || require('express'); this.http = this.http || require('http'); - this.serverRestartDelayTime = 100; + + var serverRestartDelayTime = this.serverRestartDelayTime || 100; + this.scheduleServerRestart = _.debounce(function(){ + this.restartHttpServer(); + }, serverRestartDelayTime); }, on: function() { @@ -99,44 +104,31 @@ module.exports = Task.extend({ this.scheduleServerRestart(); }, - scheduleServerRestart: function () { - // If multiple files change in quick succession, let's only restart the server once - if (!this.serverRestartScheduled) { - this.serverRestartScheduled = true; - var self = this; - setTimeout(function () { - self.serverRestartScheduled = false; - self.restartHttpServer(); - }, this.serverRestartDelayTime); - } - }, - restartHttpServer: function() { - var self = this; if (!this.serverRestartPromise) { this.serverRestartPromise = this.stopHttpServer() .then(function () { - self.invalidateCache(self.serverRoot); - return self.startHttpServer(); - }) + this.invalidateCache(this.serverRoot); + return this.startHttpServer(); + }.bind(this)) .then(function () { - self.emitter.emit('restart'); - self.ui.writeLine(''); - self.ui.writeLine(chalk.green('Server restarted.')); - self.ui.writeLine(''); - }) + this.emitter.emit('restart'); + this.ui.writeLine(''); + this.ui.writeLine(chalk.green('Server restarted.')); + this.ui.writeLine(''); + }.bind(this)) .catch(function (err) { - self.ui.writeError(err); - }) + this.ui.writeError(err); + }.bind(this)) .finally(function () { - self.serverRestartPromise = null; - }); + this.serverRestartPromise = null; + }.bind(this)); return this.serverRestartPromise; } else { return this.serverRestartPromise.then(function () { - return self.restartHttpServer(); - }); + return this.restartHttpServer(); + }.bind(this)); } }, diff --git a/tests/fixtures/dummy-project-outdated/package.json b/tests/fixtures/dummy-project-outdated/package.json index 54e58c477c..d254217b4f 100644 --- a/tests/fixtures/dummy-project-outdated/package.json +++ b/tests/fixtures/dummy-project-outdated/package.json @@ -27,4 +27,4 @@ "express": "^4.1.1", "glob": "^3.2.9" } -} +} \ No newline at end of file diff --git a/tests/unit/tasks/server/express-server-test.js b/tests/unit/tasks/server/express-server-test.js index 4bb9746083..f9373648e0 100644 --- a/tests/unit/tasks/server/express-server-test.js +++ b/tests/unit/tasks/server/express-server-test.js @@ -25,6 +25,7 @@ describe('express-server', function() { project: project, watcher: new MockWatcher(), serverWatcher: new MockServerWatcher(), + serverRestartDelayTime: 5, serverRoot: './server', proxyMiddleware: function() { return proxy.handler.bind(proxy);