Вопрос проверяет понимание механизмов управления временем ожидания в асинхронных HTTP-запросах для предотвращения зависаний.
Timeout (тайм-аут) — это механизм, который ограничивает максимальное время ожидания ответа от сервера при выполнении асинхронного HTTP-запроса. Если сервер не отвечает в течение заданного интервала, запрос автоматически прерывается, и выполняется обработка ошибки. Это критически важно для создания отзывчивых и стабильных приложений, особенно в условиях нестабильной сети или перегруженных серверов.
В JavaScript для реализации timeout можно использовать встроенный объект AbortController в сочетании с fetch. AbortController позволяет отменить запрос в любой момент. Таймер устанавливается с помощью setTimeout, который вызывает метод abort() контроллера по истечении заданного времени.
async function fetchWithTimeout(url, timeoutMs = 5000) {
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
try {
const response = await fetch(url, { signal: controller.signal });
clearTimeout(timeoutId); // очищаем таймер при успехе
return await response.json();
} catch (error) {
if (error.name === 'AbortError') {
throw new Error('Запрос превысил время ожидания');
}
throw error;
}
}Timeout — это обязательный элемент любого асинхронного взаимодействия с внешними ресурсами. Он повышает отказоустойчивость приложения, улучшает пользовательский опыт и предотвращает утечки ресурсов. Используйте timeout всегда, когда делаете запросы к внешним API или базам данных.