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

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);
});

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);

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); });

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); });

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.

Quiz z podstaw AbortController
Szybkie sprawdzenie: wzorzec anulowania.

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.

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
- Pisanie funkcji async; try/catch; równolegle a sekwencyjnie
- Limity czasu i przerywanie za pomocą AbortController
- Wzorce ponawiania prób i backoff