0Pricing
JavaScript Academy · Pelajaran

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
Batas Waktu dan Pembatalan dengan AbortController — ilustrasi 1

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);
});
Batas Waktu dan Pembatalan dengan AbortController — ilustrasi 2

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);
Batas Waktu dan Pembatalan dengan AbortController — ilustrasi 3

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 Pembatalan dengan AbortController — ilustrasi 4

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); });
Batas Waktu dan Pembatalan dengan AbortController — ilustrasi 5

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.
Batas Waktu dan Pembatalan dengan AbortController — ilustrasi 6

Kuis dasar AbortController

Pemeriksaan singkat: Pola pembatalan.

Batas Waktu dan Pembatalan dengan AbortController — ilustrasi 7

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.

Batas Waktu dan Pembatalan dengan AbortController — ilustrasi 8

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

  1. Menulis Fungsi async; try/catch; Paralel vs Berurutan
  2. Batas Waktu dan Pembatalan dengan AbortController
  3. Pola Percobaan Ulang dan Backoff
← Kembali ke JavaScript Academy