diff options
Diffstat (limited to '')
| -rw-r--r-- | node_modules/exponential-backoff/src/delay/delay.base.ts | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/node_modules/exponential-backoff/src/delay/delay.base.ts b/node_modules/exponential-backoff/src/delay/delay.base.ts new file mode 100644 index 0000000..bed90d6 --- /dev/null +++ b/node_modules/exponential-backoff/src/delay/delay.base.ts @@ -0,0 +1,34 @@ +import { IDelay } from "./delay.interface"; +import { IBackOffOptions } from "../options"; +import { JitterFactory } from "../jitter/jitter.factory"; + +export abstract class Delay implements IDelay { + protected attempt = 0; + constructor(private options: IBackOffOptions) {} + + public apply() { + return new Promise(resolve => setTimeout(resolve, this.jitteredDelay)); + } + + public setAttemptNumber(attempt: number) { + this.attempt = attempt; + } + + private get jitteredDelay() { + const jitter = JitterFactory(this.options); + return jitter(this.delay); + } + + private get delay() { + const constant = this.options.startingDelay; + const base = this.options.timeMultiple; + const power = this.numOfDelayedAttempts; + const delay = constant * Math.pow(base, power); + + return Math.min(delay, this.options.maxDelay); + } + + protected get numOfDelayedAttempts() { + return this.attempt; + } +} |