0Pricing
JavaScript Academy · درس

المهلات والإلغاء باستخدام AbortController

أضيفوا مهلات إلى الشيفرة غير المتزامنة وألغوا العمل باستخدام AbortController؛ ووصلوا الإشارات بالمهام لإيقافها مبكرًا

المهلات والإلغاء باستخدام AbortController درس مجاني في JavaScript Academy على CoddyKit. هذا هو الدرس 2 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في JavaScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة JavaScript Academy 3 دروس في المجموع.

لماذا نحتاج إلى المهلات والإلغاء؟

الهدف: إيقاف المهام الطويلة بأمان.

  • إضافة مهلة زمنية بسيطة
  • استخدام AbortController
  • ربط signal بالمهمة
  • تنظيف المؤقتات
المهلات والإلغاء باستخدام AbortController — رسم توضيحي 1

مهمة تستجيب للإشارة

أنشئوا مهام تستمع إلى signal.abort وتوقف المؤقت عند الإلغاء.

// 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);
});
المهلات والإلغاء باستخدام AbortController — رسم توضيحي 2

الإلغاء عمليًا

أنشئوا وحدة تحكم، ومرروا signal الخاصة بها، ثم استدعوا abort() للإلغاء.

// 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);
المهلات والإلغاء باستخدام AbortController — رسم توضيحي 3

غلاف المهلة الزمنية

استخدموا Promise.race لإطلاق رفض إذا استغرقت المهمة وقتًا طويلًا؛ وأزيلوا المؤقت في 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); });
المهلات والإلغاء باستخدام AbortController — رسم توضيحي 4

المهلة والإلغاء معًا

إذا فازت المهلة، فاستدعوا abort() لإيقاف العمل الأساسي مبكرًا.

// 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); });
المهلات والإلغاء باستخدام AbortController — رسم توضيحي 5

نصائح وقائمة تحقق

نصائح:

  • أزيلوا المؤقتات دائمًا في finally.
  • مرروا signal إلى المهام وتحققوا من signal.aborted.
  • فضّلوا استخدام وحدة تحكم واحدة لكل طلب.
المهلات والإلغاء باستخدام AbortController — رسم توضيحي 6

اختبار أساسيات AbortController

تحقق سريع: نمط الإلغاء.

المهلات والإلغاء باستخدام AbortController — رسم توضيحي 7

مراجعة

مراجعة: أنشأتم مهمة تستجيب للإشارة، وألغيتموها باستخدام AbortController، وأضافتم مهلة عبر Promise.race، ودمجتم الأمرين لإنهاء التنفيذ مبكرًا بأمان.

المهلات والإلغاء باستخدام AbortController — رسم توضيحي 8

الأسئلة الشائعة

هل درس «المهلات والإلغاء باستخدام AbortController» مجاني؟

نعم — نص درس «المهلات والإلغاء باستخدام AbortController» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة JavaScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة JavaScript Academy 3 دروس في المجموع.

ماذا ستتعلم في «المهلات والإلغاء باستخدام AbortController»؟

أضيفوا مهلات إلى الشيفرة غير المتزامنة وألغوا العمل باستخدام AbortController؛ ووصلوا الإشارات بالمهام لإيقافها مبكرًا تتمرن على JavaScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ JavaScript Academy؟

لا تُشترط خبرة سابقة. JavaScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 3.

كم من الوقت يستغرق درس «المهلات والإلغاء باستخدام AbortController»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس JavaScript Academy هذا؟

نعم. كل درس في JavaScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. كتابة الدوال غير المتزامنة؛ try/catch؛ التنفيذ المتوازي مقابل التسلسلي
  2. المهلات والإلغاء باستخدام AbortController
  3. أنماط إعادة المحاولة والتراجع التدريجي
← العودة إلى JavaScript Academy