Batas Waktu dan Pembatalan dengan AbortController
Tambahkan batas waktu pada kode async dan batalkan pekerjaan dengan AbortController; hubungkan sinyal ke tugas agar dapat berhenti lebih awal
Batas Waktu dan Pembatalan dengan AbortController adalah pelajaran JavaScript Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 3. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar JavaScript Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus JavaScript Academy mencakup 3 pelajaran total.
Mengapa batas waktu dan pembatalan?
Tujuan: Hentikan tugas yang berlangsung lama dengan aman.
- Tambahkan batas waktu sederhana
- Gunakan AbortController
- Hubungkan sinyal ke tugas Anda
- Bersihkan pengatur waktu

Tugas yang peka terhadap sinyal
Buat tugas yang listen to signal.abort dan menghentikan pengatur waktu saat dibatalkan.
// 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);
});

Abort dalam praktik
Buat sebuah controller, teruskan signal-nya, lalu panggil abort() untuk membatalkan.
// 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);

Pembungkus batas waktu
Gunakan Promise.race untuk menolak jika tugas memerlukan waktu terlalu lama; hapus pengatur waktu di dalam 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); });

Batas waktu dan abort bersama-sama
Jika batas waktu menang, panggil abort() agar pekerjaan yang mendasarinya berhenti lebih awal.
// 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); });

Kiat dan daftar periksa
Kiat:
- Selalu hapus pengatur waktu di dalam finally.
- Teruskan signal ke dalam tugas dan periksa signal.aborted.
- Utamakan satu controller untuk setiap permintaan.

Kuis dasar AbortController
Pemeriksaan singkat: Pola pembatalan.

Ringkasan
Ringkasan: Anda membuat tugas yang peka terhadap sinyal, membatalkannya dengan AbortController, menambahkan batas waktu melalui Promise.race, dan menggabungkan keduanya untuk keluar lebih awal dengan aman.

Pertanyaan yang Sering Diajukan
Apakah pelajaran “Batas Waktu dan Pembatalan dengan AbortController” gratis?
Ya — teks lengkap “Batas Waktu dan Pembatalan dengan AbortController” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus JavaScript Academy, upgrade ke CoddyKit PRO. Kursus JavaScript Academy mencakup 3 pelajaran total.
Apa yang akan aku pelajari di “Batas Waktu dan Pembatalan dengan AbortController”?
Tambahkan batas waktu pada kode async dan batalkan pekerjaan dengan AbortController; hubungkan sinyal ke tugas agar dapat berhenti lebih awal Kamu berlatih JavaScript Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai JavaScript Academy?
Tidak diperlukan pengalaman sebelumnya. JavaScript Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 3.
Berapa lama pelajaran “Batas Waktu dan Pembatalan dengan AbortController” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran JavaScript Academy ini?
Ya. Setiap pelajaran JavaScript Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Menulis Fungsi async; try/catch; Paralel vs Berurutan
- Batas Waktu dan Pembatalan dengan AbortController
- Pola Percobaan Ulang dan Backoff