> Как реализовать тайм-аут для асинхронного запроса, если ответ приходит дольше одной секунды в JavaScript? (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Яндекс
Стек: JavaScript
> Пример ответа
Для реализации тайм-аута асинхронного запроса в JavaScript можно использовать комбинацию Promise.race() и setTimeout(). Вот пример:
JAVASCRIPTasync function fetchWithTimeout(url, timeout = 1000) {const controller = new AbortController();const timeoutId = setTimeout(() => controller.abort(), timeout);try {const response = await fetch(url, { signal: controller.signal });clearTimeout(timeoutId);return response;} catch (error) {clearTimeout(timeoutId);if (error.name === 'AbortError') {throw new Error('Запрос превысил тайм-аут в 1 секунду');}throw error;}}// Использованиеtry {const data = await fetchWithTimeout('https://api.example.com/data', 1000);console.log('Ответ получен:', data);} catch (error) {console.error('Ошибка:', error.message);}
Альтернативный вариант с Promise.race() для случаев, когда AbortController недоступен:
JAVASCRIPTfunction fetchWithTimeoutRace(url, timeout = 1000) {return Promise.race([fetch(url),new Promise((_, reject) =>setTimeout(() => reject(new Error('Тайм-аут запроса')), timeout))]);}
Первый вариант предпочтительнее, так как он не только отклоняет промис, но и отменяет сам запрос через AbortController, предотвращая лишнюю нагрузку на сеть. Второй вариант просто игнорирует ответ после тайм-аута, но запрос продолжает выполняться.
> Похожие задачи по frontend
Есть ли разница между вызовом setTimeout с нулевой задержкой и без тайминга в JavaScript
Нужно ли использовать замыкания при обработке результатов нескольких асинхронных запросов в JavaScript?
Что содержит this в обработчике события на кнопку в JavaScript
Как реализовать декоратор функции в JavaScript, ограничивающий число вызовов и вызывающий колбэк при последнем вызове
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью