Выбор ответа Middle Асинхронные паттерны обновлено
AbortSignal.timeout
Вопрос
Как в Node 22 сделать fetch с таймаутом 3 секунды, который реально прерывает запрос?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: fetch(url, { signal: AbortSignal.timeout(3000) }). AbortSignal.timeout(ms) создаёт сигнал, который сам прерывается через заданное время. fetch отменяет запрос и отклоняется с ошибкой TimeoutError. - Опции timeout у стандартного fetch нет, она будет проигнорирована. - Метода fetch.cancel не…
Варианты ответа
fetch(url, { timeout: 3000, keepalive: false })await Promise.race([fetch(url), sleep(3000)])с отменойsetTimeout(() => fetch.cancel(), 3000)fetch(url, { signal: AbortSignal.timeout(3000) })правильный ответ
Разбор
AbortSignal.timeout(ms) создаёт сигнал, который сам прерывается через заданное время. fetch отменяет запрос и отклоняется с ошибкой TimeoutError.
- Опции
timeoutу стандартногоfetchнет, она будет проигнорирована. - Метода
fetch.cancelне существует. raceсо sleep не прерывает запрос и к тому же вернёт результат sleep как «успех».
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.