Fix sequential rate limiting

This commit is contained in:
Amish Shah
2017-04-11 17:54:03 +01:00
parent 9365272baf
commit 6495df50f9
2 changed files with 12 additions and 3 deletions

View File

@@ -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);

View File

@@ -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<?Object|Error>}
*/
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();
});
}
}