0Pricing
JavaScript Academy · Lekcja

Limity czasu i przerywanie za pomocą AbortController

Dodawanie limitów czasu do kodu asynchronicznego i anulowanie pracy za pomocą AbortController; przekazywanie sygnałów do zadań, aby kończyć je wcześniej

Limity czasu i przerywanie za pomocą AbortController to bezpłatna lekcja JavaScript Academy na CoddyKit. To lekcja 2 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej JavaScript Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs JavaScript Academy zawiera 3 lekcji w sumie.

Po co limity czasu i anulowanie?

Cel: Bezpiecznie zatrzymywać długotrwałe zadania.

  • Dodawanie prostego limitu czasu
  • Używanie AbortController
  • Przekazywanie signal do zadania
  • Sprzątanie timerów
Limity czasu i przerywanie za pomocą AbortController — ilustracja 1

Zadanie reagujące na signal

Należy tworzyć zadania, które listen to signal.abort i zatrzymują timer po anulowaniu.

// Fake fetch that respects AbortSignal
function fakeFetch(ms, value, signal) {
  return new Promise(function (resolve, reject) {
    // Abort handler
    function onAbort() {
      clearTimeout(t);
      reject(new Error("aborted"));
    }

    // If already aborted
    if (signal && signal.aborted) {
      return reject(new Error("aborted"));
    }

    // Finish timer
    const t = setTimeout(function () {
      if (signal) {
        signal.removeEventListener("abort", onAbort);
      }
      resolve(value);
    }, ms);

    // Listen for abort
    if (signal) {
      signal.addEventListener("abort", onAbort);
    }
  });
}

fakeFetch(5, "OK").then(function (v) {
  console.log("fakeFetch:", v);
});
Limity czasu i przerywanie za pomocą AbortController — ilustracja 2

Anulowanie w praktyce

Należy utworzyć kontroler, przekazać jego signal i wywołać abort(), aby anulować operację.

// AbortController cancels signal-aware tasks
const controller = new AbortController();

fakeFetch(20, "Too slow", controller.signal)
  .then(function (v) {
    console.log("done:", v);
  })
  .catch(function (e) {
    console.log("catch:", e.message);
  });

// Abort after a short delay
setTimeout(function () {
  controller.abort();
  console.log("aborted");
}, 5);
Limity czasu i przerywanie za pomocą AbortController — ilustracja 3

Opakowanie z limitem czasu

Należy użyć Promise.race, aby odrzucić Promise, jeśli zadanie trwa zbyt długo; timer trzeba wyczyścić w bloku finally.

// Add a timeout to any Promise with Promise.race
function withTimeout(promise, ms) {
  return Promise.race([
    promise,
    new Promise(function (_resolve, reject) {
      const t = setTimeout(function () {
        reject(new Error("timeout"));
      }, ms);
      // Small trick: clear timer when the main promise settles
      promise.finally(function () { clearTimeout(t); });
    })
  ]);
}

// Demo: this will time out
withTimeout(fakeFetch(30, "late"), 10)
  .then(function (v) { console.log("value:", v); })
  .catch(function (e) { console.log("timeout:", e.message); });
Limity czasu i przerywanie za pomocą AbortController — ilustracja 4

Timeout i abort razem

Jeśli limit czasu zadziała jako pierwszy, należy wywołać abort(), aby wcześniej zatrzymać pracę wykonywaną w tle.

// Combine: abort if timeout fires
async function fetchWithTimeout(msWork, msTimeout) {
  const c = new AbortController();

  const task = fakeFetch(msWork, "data", c.signal);

  // If timeout wins, abort the task
  try {
    const result = await withTimeout(task, msTimeout);
    return result;
  } catch (e) {
    c.abort();
    throw e;
  }
}

fetchWithTimeout(25, 10)
  .then(function (v) { console.log("got:", v); })
  .catch(function (e) { console.log("failed:", e.message); });
Limity czasu i przerywanie za pomocą AbortController — ilustracja 5

Wskazówki i lista kontrolna

Wskazówki:

  • Zawsze należy czyścić timery w bloku finally.
  • Do zadań należy przekazywać signal i sprawdzać signal.aborted.
  • Warto używać jednego kontrolera na żądanie.
Limity czasu i przerywanie za pomocą AbortController — ilustracja 6

Quiz z podstaw AbortController

Szybkie sprawdzenie: wzorzec anulowania.

Limity czasu i przerywanie za pomocą AbortController — ilustracja 7

Podsumowanie

Podsumowanie: utworzono zadanie reagujące na sygnał, anulowano je za pomocą AbortController, dodano limit czasu przez Promise.race oraz połączono oba mechanizmy, aby bezpiecznie kończyć działanie wcześniej.

Limity czasu i przerywanie za pomocą AbortController — ilustracja 8

Często zadawane pytania

Czy lekcja „Limity czasu i przerywanie za pomocą AbortController” jest bezpłatna?

Tak — pełny tekst „Limity czasu i przerywanie za pomocą AbortController” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu JavaScript Academy, przejdź na CoddyKit PRO. Kurs JavaScript Academy zawiera 3 lekcji w sumie.

Co nauczysz się w „Limity czasu i przerywanie za pomocą AbortController”?

Dodawanie limitów czasu do kodu asynchronicznego i anulowanie pracy za pomocą AbortController; przekazywanie sygnałów do zadań, aby kończyć je wcześniej Ćwiczysz JavaScript Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć JavaScript Academy?

Nie wymagamy żadnego doświadczenia. JavaScript Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 3.

Ile czasu zajmuje lekcja „Limity czasu i przerywanie za pomocą AbortController”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji JavaScript Academy?

Tak. Każda lekcja JavaScript Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Pisanie funkcji async; try/catch; równolegle a sekwencyjnie
  2. Limity czasu i przerywanie za pomocą AbortController
  3. Wzorce ponawiania prób i backoff
← Powrót do JavaScript Academy