@qso-soft/shared
Version:
Shared library for QSO-soft
31 lines • 1.32 kB
JavaScript
import { sleep } from './sleep';
export const retry = async ({ callback, triggerErrorMessages, maxAttempts = 3, baseDelayMs = 1, logger, logTemplate, }) => {
let attempt = 1;
let result = undefined;
while (attempt <= maxAttempts && !result) {
try {
result = await callback();
}
catch (error) {
const errorMessage = error?.message ?? 'unknown error';
logger?.error(`Attempt ${attempt} failed: ${errorMessage}`, logTemplate);
const hasExitError = triggerErrorMessages && triggerErrorMessages.some((triggerErrorMsg) => errorMessage.includes(triggerErrorMsg));
if (hasExitError) {
throw new Error(errorMessage);
}
if (attempt < maxAttempts) {
const delayMs = Math.pow(2, attempt - 1) * baseDelayMs;
logger?.info(`Next attempt will be in ${delayMs} s`, logTemplate);
await sleep(delayMs);
attempt++;
}
else {
const errorMessageAllAttempts = `All ${maxAttempts} attempts were failed`;
logger?.error(errorMessageAllAttempts, logTemplate);
throw new Error(errorMessage);
}
}
}
return result;
};
//# sourceMappingURL=retry.js.map