Files
cannaiq/frontend/node_modules/es-toolkit/dist/function/retry.mjs
2025-11-28 19:45:44 -07:00

37 lines
1011 B
JavaScript

import { delay } from '../promise/delay.mjs';
const DEFAULT_DELAY = 0;
const DEFAULT_RETRIES = Number.POSITIVE_INFINITY;
async function retry(func, _options) {
let delay$1;
let retries;
let signal;
if (typeof _options === 'number') {
delay$1 = DEFAULT_DELAY;
retries = _options;
signal = undefined;
}
else {
delay$1 = _options?.delay ?? DEFAULT_DELAY;
retries = _options?.retries ?? DEFAULT_RETRIES;
signal = _options?.signal;
}
let error;
for (let attempts = 0; attempts < retries; attempts++) {
if (signal?.aborted) {
throw error ?? new Error(`The retry operation was aborted due to an abort signal.`);
}
try {
return await func();
}
catch (err) {
error = err;
const currentDelay = typeof delay$1 === 'function' ? delay$1(attempts) : delay$1;
await delay(currentDelay);
}
}
throw error;
}
export { retry };