Merion Academy
Найти пользователей с шестью и более заказами — куда поставить условие
? 🐸 SELECT user_id, COUNT(*) AS orders_count FROM orders GROUP BY user_id HAVING COUNT(*) >= 6; WHERE фильтрует строки до группировки. HAVING фильтрует группы после неё. Поэтому условие на COUNT(*) находится в HAVING. Если нужны только оплаченные заказы, добавь условие раньше: SELECT user_id, COUNT(*) AS paid_orders FROM orders...
Если запрос из Node.js зависает слишком долго, то ставим дедлайн
Если проект использует встроенный fetch, укажи таймаут через AbortSignal.timeout: const res = await fetch(url, { signal: AbortSignal.timeout(5000) }); Через 5 секунд сигнал отменит запрос. Ошибку всё равно нужно обработать: таймаут — ожидаемый сценарий при работе с сетью, а не повод ронять весь обработчик. try { const res = await fetch(url, { signal: AbortSignal.timeout(5000) }); if (!res.ok) throw new Error('HTTP ' + res.status); } catch (err) { console...
Разгадка пятничного кейса
🐸 Одна из вероятных причин – в зависимости useEffect попал объект или функция, которые создаются заново на каждом рендере. Эффект делает запрос → ответ меняет state → новый рендер создаёт новую зависимость → эффект снова делает запрос. Проверка: сравнить значения зависимостей между рендерами и временно заменить составную зависимость на стабильный примитив, например status или page. Если цикл исчез, источник найден. В реальном проекте возможны и другие причины; одних 150 запросов для точного диагноза мало...
React отправляет запрос дважды? Сначала проверь причину
🐸 В разработке StrictMode может дополнительно запускать setup и cleanup эффекта. Это помогает заметить эффекты, которые нельзя безопасно повторить. В production такое дополнительное выполнение из-за StrictMode не происходит. Но если запрос повторяется при каждом рендере, посмотри на зависимости: const filters = { status: 'open' }; useEffect(() => { load(filters); }, [filters]); Объект filters создаётся заново при каждом рендере. Для React это новая зависимость. Вынеси постоянное значение...
