После исчерпания попыток функция должна завершиться ошибкой, а не зависнуть или вернуть undefined; правила повторов задаются явно.
Реализуйте функцию, которая повторяет fetch-запрос несколько раз при неудаче. Что должно происходить после исчерпания попыток?
После исчерпания попыток функция должна завершиться ошибкой, а не зависнуть или вернуть undefined; правила повторов задаются явно.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
После исчерпания попыток функция должна завершиться ошибкой, а не зависнуть или вернуть undefined; правила повторов задаются явно.
Для фабрики повторяемого запроса:
async function retryFetch(makeRequest, attempts) {
if (!Number.isInteger(attempts) || attempts < 1) throw new RangeError('attempts');
for (let i = 0; ; i++) {
try { return await makeRequest(); }
catch (error) {
if (i + 1 === attempts || error?.name === 'AbortError') throw error;
}
}
}
Пример: retryFetch(() => fetch(url), 3). HTTP 500 не отклоняет fetch автоматически; отдельно определите retryable-статусы, backoff и безопасность повторения побочных эффектов.