Я написал простую функцию для повторной попытки переданной функции, если она сработает. Я сделал это для своего приложения, которое должно вызывать внешний 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;
}
Кажется, это работает, вы, ребята, думаете, что я упустил из виду какой-либо угловой случай?