JS JavaScript  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Средний  · 

Fetch, HTTP и работа с API

Тест проверяет поведение fetch, статусы HTTP, заголовки, разбор тела, потоковое чтение и устойчивые повторные запросы. Вопросы построены вокруг реальных сбоев: 404, который не попал в catch, дважды прочитанный Response, потерянная отмена и повтор небезопасной операции.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. В тесте 25 вопросов и 70 минут; код лучше читать построчно, не полагаясь на первое впечатление. После завершения откроются общий процент, 5 тематических шкал и объяснение каждого решения.
Вопрос 1 из 25
Когда Promise от fetch обычно выполняется успешно?
JavaScript
const response = await fetch("/api/report");
const data = await response.json();
Вопрос 2 из 25
Что произойдёт с GET-запросом, которому передали body?
JavaScript
await fetch("/search", {
  method: "GET",
  body: JSON.stringify({ q: "js" })
});
Вопрос 3 из 25
Как корректно добавить параметры, не собирая строку вручную?
JavaScript
const url = new URL("/search", location.origin);
url.search = new URLSearchParams({ q: "a & b", page: "2" });
const response = await fetch(url);
Вопрос 4 из 25
Что означает credentials: "include"?
Вопрос 5 из 25
Почему нельзя считать клиентский заголовок X-Role доказательством роли пользователя?
Вопрос 6 из 25
Почему catch не сработал на ответ 404?
JavaScript
try {
  const response = await fetch("/api/missing");
  console.log("resolved", response.status);
} catch {
  console.log("network failure");
}
Вопрос 7 из 25
Для какого ответа Response.ok равно true?
JavaScript
const response = new Response(null, { status: 204 });
console.log(response.ok);
Вопрос 8 из 25
Почему безусловный response.json() опасен при ошибке прокси?
JavaScript
const response = await fetch(url);
const data = await response.json();
Вопрос 9 из 25
Какой заголовок полезен для условного повторного чтения неизменившегося ресурса?
Вопрос 10 из 25
Что делать с Retry-After при ответе 429?
Вопрос 11 из 25
Что случится при втором чтении тела того же Response?
JavaScript
const response = await fetch(url);
const text = await response.text();
const json = await response.json();
Вопрос 12 из 25
Когда следует вызвать response.clone()?
JavaScript
const response = await fetch(url);
const cacheCopy = response.clone();
const data = await response.json();
Вопрос 13 из 25
Зачем TextDecoder.decode(chunk, { stream: true }) при чтении байтов частями?
JavaScript
const reader = response.body.getReader();
const decoder = new TextDecoder();
let text = "";
for (;;) {
  const { value, done } = await reader.read();
  if (done) break;
  text += decoder.decode(value, { stream: true });
}
Вопрос 14 из 25
Успешный JSON разобран. Что ещё нужно перед использованием как User?
Вопрос 15 из 25
Почему потоковая обработка не всегда быстрее обычного json()?
Вопрос 16 из 25
Как реализовать таймаут fetch без оставленного таймера?
JavaScript
async function fetchWithTimeout(url) {
  const controller = new AbortController();
  const id = setTimeout(() => controller.abort("timeout"), 5000);
  try {
    return await fetch(url, { signal: controller.signal });
  } finally {
    clearTimeout(id);
  }
}
Вопрос 17 из 25
Почему автоматический повтор POST оплаты опасен?
JavaScript
async function pay(body) {
  for (let attempt = 0; attempt < 3; attempt++) {
    try {
      return await fetch("/pay", { method: "POST", body });
    } catch {}
  }
}
Вопрос 18 из 25
Зачем добавлять случайный разброс к экспоненциальной задержке?
Вопрос 19 из 25
Какой статус чаще всего не стоит автоматически повторять без изменения запроса?
JavaScript
const response = await fetch(url, options);
if (!response.ok) scheduleRetry(response.status);
Вопрос 20 из 25
Что важнее отдельного таймаута каждой попытки?
Вопрос 21 из 25
Почему поздний ответ старого поиска перезаписал свежий?
JavaScript
let query = "a";
load(query).then(show);
query = "ab";
load(query).then(show);
Вопрос 22 из 25
Как исправить гонку поиска с номером поколения?
JavaScript
let last = 0;
async function search(q) {
  const id = ++last;
  const data = await load(q);
  if (id === last) show(data);
}
Вопрос 23 из 25
Что означает TypeError: Failed to fetch в браузере?
Вопрос 24 из 25
Какой журнал запроса полезнее?
Вопрос 25 из 25
Как детерминированно проверить таймаут?

Ответьте на все 25 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу