diff --git a/src/client/rest/RESTManager.js b/src/client/rest/RESTManager.js index ac1ce6e99..3be85d1f0 100644 --- a/src/client/rest/RESTManager.js +++ b/src/client/rest/RESTManager.js @@ -38,7 +38,6 @@ class RESTManager { makeRequest(method, url, auth, data, file) { const apiRequest = new APIRequest(this, method, url, auth, data, file); - if (!this.handlers[apiRequest.route]) { const RequestHandlerType = this.getRequestHandler(); this.handlers[apiRequest.route] = new RequestHandlerType(this, apiRequest.route); diff --git a/src/client/rest/RequestHandlers/Sequential.js b/src/client/rest/RequestHandlers/Sequential.js index 261240df1..b92db1ebe 100644 --- a/src/client/rest/RequestHandlers/Sequential.js +++ b/src/client/rest/RequestHandlers/Sequential.js @@ -27,6 +27,12 @@ class SequentialRequestHandler extends RequestHandler { * @type {number} */ this.timeDifference = 0; + + /** + * Whether the queue is being processed or not + * @type {boolean} + */ + this.busy = false; } push(request) { @@ -40,6 +46,7 @@ class SequentialRequestHandler extends RequestHandler { * @returns {Promise} */ execute(item) { + this.busy = true; return new Promise(resolve => { item.request.gen().end((err, res) => { if (res && res.headers) { @@ -82,8 +89,11 @@ class SequentialRequestHandler extends RequestHandler { handle() { super.handle(); - if (this.remaining === 0 || this.queue.length === 0 || this.globalLimit) return; - this.execute(this.queue.shift()).then(() => this.handle()); + if (this.busy || this.remaining === 0 || this.queue.length === 0 || this.globalLimit) return; + this.execute(this.queue.shift()).then(() => { + this.busy = false; + this.handle(); + }); } }