Вопрос проверяет умение проектировать устойчивое клиент-серверное взаимодействие при временной недоступности backend.
При падении сервера polling нельзя продолжать “в лоб” с тем же интервалом. Нужно обрабатывать ошибки и менять поведение клиента: замедлять запросы, делать retry с задержкой и информировать пользователя. Часто используют exponential backoff, чтобы не усугублять нагрузку. После восстановления сервера polling возвращается к нормальному режиму.
При сбоях polling может сам стать проблемой, если его не контролировать.
Перед деталями важно зафиксировать цель: не добивать сервер и не ломать UX.
Обнаружить ошибку
HTTP 5xx, network error, timeout.
Временно остановить или замедлить polling
увеличить интервал запросов.
Повторить попытку позже
использовать retry-логику.
Восстановить нормальный режим
после успешного ответа.
let delay = 1000;
async function poll() {
try {
await fetch("/api/data");
delay = 1000; // сброс при успехе
} catch {
delay = Math.min(delay * 2, 30000);
}
setTimeout(poll, delay);
}
Интервал увеличивается при ошибках.
Сервер получает “передышку”.
Клиент остаётся устойчивым.
Показывать ошибку при каждом запросе.
Делать бесконечный частый retry.
Не различать временную и критическую ошибку.
При polling падение сервера нужно обрабатывать через замедление, retry и backoff, чтобы сохранить стабильность системы.