add.[ALL]
This commit is contained in:
parent
5ac24c8cea
commit
780ad9a200
54 changed files with 3733 additions and 0 deletions
90
.resources/app/common/Backoff.js
Normal file
90
.resources/app/common/Backoff.js
Normal file
|
@ -0,0 +1,90 @@
|
|||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = void 0;
|
||||
// copied from discord_app/lib because including from there is broken.
|
||||
|
||||
class Backoff {
|
||||
/**
|
||||
* Create a backoff instance can automatically backoff retries.
|
||||
*/
|
||||
constructor(min = 500, max = null, jitter = true) {
|
||||
this.min = min;
|
||||
this.max = max != null ? max : min * 10;
|
||||
this.jitter = jitter;
|
||||
this._current = min;
|
||||
this._timeoutId = null;
|
||||
this._fails = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the number of failures.
|
||||
*/
|
||||
get fails() {
|
||||
return this._fails;
|
||||
}
|
||||
|
||||
/**
|
||||
* Current backoff value in milliseconds.
|
||||
*/
|
||||
get current() {
|
||||
return this._current;
|
||||
}
|
||||
|
||||
/**
|
||||
* A callback is going to fire.
|
||||
*/
|
||||
get pending() {
|
||||
return this._timeoutId != null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear any pending callbacks and reset the backoff.
|
||||
*/
|
||||
succeed() {
|
||||
this.cancel();
|
||||
this._fails = 0;
|
||||
this._current = this.min;
|
||||
}
|
||||
|
||||
/**
|
||||
* Increment the backoff and schedule a callback if provided.
|
||||
*/
|
||||
fail(callback) {
|
||||
this._fails += 1;
|
||||
let delay = this._current * 2;
|
||||
if (this.jitter) {
|
||||
delay *= Math.random();
|
||||
}
|
||||
this._current = Math.min(this._current + delay, this.max);
|
||||
if (callback != null) {
|
||||
if (this._timeoutId != null) {
|
||||
throw new Error('callback already pending');
|
||||
}
|
||||
this._timeoutId = setTimeout(() => {
|
||||
try {
|
||||
if (callback != null) {
|
||||
callback();
|
||||
}
|
||||
} finally {
|
||||
this._timeoutId = null;
|
||||
}
|
||||
}, this._current);
|
||||
}
|
||||
return this._current;
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear any pending callbacks.
|
||||
*/
|
||||
cancel() {
|
||||
if (this._timeoutId != null) {
|
||||
clearTimeout(this._timeoutId);
|
||||
this._timeoutId = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
exports.default = Backoff;
|
||||
module.exports = exports.default;
|
Loading…
Add table
Add a link
Reference in a new issue