UNPKG

@qso-soft/shared

Version:

Shared library for QSO-soft

31 lines 1.32 kB
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