TGViewer
Glo Academy Glo Academy @glo_academy · 3.76K subscribers
Post #2727 386
⚡ Таймаут для fetch без setTimeout

Таймаут для fetch обычно собирают из трёх частей: AbortController, setTimeout, который дёргает abort(), и clearTimeout в finally.

try {
const res = await fetch(url, {
signal: AbortSignal.timeout(5000)
});
const data = await res.json();
} catch (err) {
if (err.name === 'TimeoutError') {
// ответа нет 5 секунд
}
}


AbortSignal.timeout(5000) создаёт сигнал, который сам сработает через 5 секунд. Передаёшь его в fetch как обычный signal, таймер живёт внутри сигнала, чистить его в finally не нужно. Ошибка приходит с именем TimeoutError, а не AbortError — по нему в catch отличаешь «сервер не ответил» от «пользователь отменил».

Таймер не останавливается после первого await. Если сервер прислал заголовки, а тело отдаёт по капле, то res.json() тоже упадёт с TimeoutError, когда 5 секунд истекут. Отдельный таймаут на чтение ответа ставить не нужно.

Работает в Chrome с 124-й версии, Firefox со 100-й, Safari с 16-й.

🔥 — если было полезно

@glo_academy | #js_day
  • 🔥 12
  • ❤ 2
More from @glo_academy
  1. Oct 2, 2026🧰 svgo Экспортируешь иконку колокольчика из графического редактора, а файл весит почти 2…
  2. Oct 1, 2026🤳 @glo_academy
  3. Sep 29, 2026✂️ Шрифт как в нативном приложении без загрузки файлов Подключаешь красивый шрифт с сервер…
  4. Sep 28, 2026🎨 Звёздочка у обязательного поля озвучится словами Ставишь звёздочку у обязательного поля…
  5. Sep 26, 2026📐 Лендинг жилого комплекса Макет средней сложности без адаптива на русском языке @glo_aca…
  6. Sep 25, 2026⚡ Одна строка разлогинит все вкладки сайта Нажал «Выйти», а в соседней вкладке всё ещё отк…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →