export async function retry()

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;
    }
  }
}