Middle+
Jak vyřešit problém race condition při přepínání uživatelů (když po sobě následují několik požadavků)? Jaké přístupy lze použít: AbortController, debounce, blokování tlačítek přes stav načítání?
sobes.tech AI
Odpověď od AI
Проблема race condition при переключении пользователей возникает, когда несколько запросов отправляются подряд, и результат последнего может быть непредсказуемым. Для решения можно использовать несколько подходов:
- AbortController — позволяет отменить предыдущие запросы, если отправлен новый. Это предотвращает обработку устаревших ответов.
const controller = new AbortController();
function fetchData() {
controller.abort(); // отменяем предыдущий запрос
controller = new AbortController();
fetch('/api/data', { signal: controller.signal })
.then(response => response.json())
.then(data => console.log(data))
.catch(err => {
if (err.name === 'AbortError') {
console.log('Запрос отменён');
}
});
}
-
Debounce — задержка выполнения функции до тех пор, пока не прекратятся быстрые повторные вызовы. Это уменьшает количество запросов.
-
Блокировка кнопок через состояние loading — предотвращает повторные нажатия, пока предыдущий запрос не завершится.
Часто комбинируют эти методы для надежного контроля запросов и улучшения UX.