in packages/aws-appsync-subscription-link/src/utils/retry.ts [28:53]
export async function retry(
functionToRetry: Function,
args: any[],
delayFn: DelayFunction,
attempt: number = 1
) {
logger(`Attempt #${attempt} for this vars: ${JSON.stringify(args)}`);
try {
await functionToRetry.apply(undefined, args);
} catch (err) {
logger(`error ${err}`);
if (isNonRetryableError(err)) {
logger("non retryable error");
throw err;
}
const retryIn = delayFn(attempt, args, err);
logger("retryIn ", retryIn);
if (retryIn !== false) {
await new Promise(res => setTimeout(res, retryIn));
return await retry(functionToRetry, args, delayFn, attempt + 1);
} else {
throw err;
}
}
}