Простой повтор асинхронной функции

Я написал простую функцию для повторной попытки переданной функции, если она сработает. Я сделал это для своего приложения, которое должно вызывать внешний API через сеть, что может ложно выйти из строя.

export async function retry(fn, retries, delayMs, onFailedAttempt = null) {
    let lastError = null;

    for (let attempt = 0; attempt <= retries; attempt++) {
        if (attempt > 0) {
            await delay(delayMs);
        }

        try {
            const res = await fn();
            return res;
        } catch (error) {
            if (onFailedAttempt) {
                onFailedAttempt(error, attempt, retries, delayMs);
            }

            if (window.verbose) {
                console.debug(`Trial ${attempt + 1}/${retries} failed. Retrying in ${delayMs}ms...`);
            }

            lastError = error;
        }
    }

    throw lastError;
}

Кажется, это работает, вы, ребята, думаете, что я упустил из виду какой-либо угловой случай?

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *