diff options
| author | pack <pack@packgekko.xyz> | 2026-08-09 10:54:08 +0000 |
|---|---|---|
| committer | pack <pack@packgekko.xyz> | 2026-08-09 10:54:08 +0000 |
| commit | d3adc16a08d95d6e331de55d7d3bf05a66a874a8 (patch) | |
| tree | a2dabd199501e67c547c2ce79e1374ca3aa55443 /node_modules/exponential-backoff/src/backoff.ts | |
| parent | 55a4f1fc869e41aca748c63d3018f0448b1606e0 (diff) | |
| download | crud-d3adc16a08d95d6e331de55d7d3bf05a66a874a8.tar.gz | |
stop tracking node_modules/
Diffstat (limited to '')
| -rw-r--r-- | node_modules/exponential-backoff/src/backoff.ts | 60 |
1 files changed, 0 insertions, 60 deletions
diff --git a/node_modules/exponential-backoff/src/backoff.ts b/node_modules/exponential-backoff/src/backoff.ts deleted file mode 100644 index 549770b..0000000 --- a/node_modules/exponential-backoff/src/backoff.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { - IBackOffOptions, - getSanitizedOptions, - BackoffOptions -} from "./options"; -import { DelayFactory } from "./delay/delay.factory"; - -export { BackoffOptions, IBackOffOptions }; - -/** - * Executes a function with exponential backoff. - * @param request the function to be executed - * @param options options to customize the backoff behavior - * @returns Promise that resolves to the result of the `request` function - */ -export async function backOff<T>( - request: () => Promise<T>, - options: BackoffOptions = {} -): Promise<T> { - const sanitizedOptions = getSanitizedOptions(options); - const backOff = new BackOff(request, sanitizedOptions); - - return await backOff.execute(); -} - -class BackOff<T> { - private attemptNumber = 0; - - constructor( - private request: () => Promise<T>, - private options: IBackOffOptions - ) {} - - public async execute(): Promise<T> { - while (!this.attemptLimitReached) { - try { - await this.applyDelay(); - return await this.request(); - } catch (e) { - this.attemptNumber++; - const shouldRetry = await this.options.retry(e, this.attemptNumber); - - if (!shouldRetry || this.attemptLimitReached) { - throw e; - } - } - } - - throw new Error("Something went wrong."); - } - - private get attemptLimitReached() { - return this.attemptNumber >= this.options.numOfAttempts; - } - - private async applyDelay() { - const delay = DelayFactory(this.options, this.attemptNumber); - await delay.apply(); - } -} |