محتويات الدورة

Express.js / المتوسط: الوحدات والهوية والموائمات / الدرس 8

الخدمات غير المتزامنة والاعتمادات وميزانية المصدر

اربط عمل المصدر بالطلب مع تقييد التزامن والمواعيد وتحديد مسؤولية الإعادة.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • ميز عمل الخدمة المنتظر عن المهمة الخلفية المنفصلة.
  • احفظ موعداً نهائياً مشتركاً بدلاً من تجديد مهلة كاملة عند كل انتقال.

دع المسار يكيف HTTP والخدمة تملك حالة الاستخدام

ينقل المسار الإدخال المتحقق منه وسياق الهوية إلى خدمة، ثم يحول النتيجة إلى HTTP. تملك الخدمة سلوك العمل المتماسك ومتطلبات مصادره. يتيح الفصل استخدام الحالة عبر موائم آخر دون نسخ التفويض في كل عنوان. لا تجعل async حساب JavaScript المكثف غير حاجب، ولا تفرض حداً للاتصالات البعيدة. راجع تفرع المصادر وانتظار المجمع وحجم العمل. احتفظ بالإعداد وعملاء المصدر طويلي العمر خارج إنشاء الطلب، مع إبقاء مخابئ تعتمد على الهوية ضمن عمر الطلب الصحيح، لأن الفصل بين الأعمار جزء من صحة الاعتماد.

مرر سياق عملية صريحاً

يمرر الجزء الهوية وموعداً نهائياً محقوناً للخدمة. لا ينشئ Express هذه الخصائص المخصصة ولا يفرض الموعد تلقائياً؛ على الخدمة والموائم احترامه بآليات مهلة وإلغاء مدعومة. يبقي الانتظار الرفض ضمن مسار وعود Express 5. بدء العمل دون انتظاره أو إعادته يحتاج مالكاً مستقلاً للإكمال والفشل. وإذا كان المطلوب عملاً خلفياً دائماً فيحتاج بروتوكول طابور وهوية نتيجة، لا وعداً منفصلاً قد تنتهي العملية قبل اكتماله. يوضح السياق مسؤوليات متعاقداً عليها ولا يحققها اسم الخاصية وحده.

javascript سياق توضيحي من الطلب إلى الخدمة
app.get("/courses/:id/card", async (req,res) => {
  const card = await catalog.card({
    id:req.params.id, principal:req.principal,
    deadlineMs:req.operationDeadlineMs
  });
  return res.json(card);
});

تمثل الخصائص عقود تطبيق محقونة. لا يضبط الجزء مهلات المصدر ولا ينفذ الإلغاء.

احسب الزمن المتبقي مع حجز للإنهاء

يمنع الموعد المشترك أن يتلقى كل اتصال في السلسلة مهلة كاملة جديدة. يحجز النموذج الحسابي جزءاً من الزمن للتسلسل والتنظيف. أرقامه اصطناعية ولا توصي بزمن إنتاج مقبول. إذا نفدت ميزانية المصدر يتبع الموائم فشل الموعد المعلن بدلاً من استعمال انتظار غير محدود بصمت. قد لا يدعم برنامج تشغيل فعلي الإلغاء؛ فوثق القيد وراقب هل يتوقف العمل المنتهية مهلته. انتهاء انتظار العميل وانقطاع المصدر حقيقتان منفصلتان. يفيد الحساب في كشف الخطأ حتى قبل اختبار آلية التنفيذ التي ستطبق الحد.

javascript حساب محلي كامل للميزانية المتبقية
function sourceBudget(deadline,now,reserve) {
  return Math.max(0,deadline-now-reserve);
}
console.assert(sourceBudget(1000,900,20) === 80);
console.assert(sourceBudget(1000,990,20) === 0);
console.assert(sourceBudget(1000,1100,20) === 0);

الميزانيات 80 و0 و0 بوحدة الزمن الاصطناعية نفسها. لا توقف الدالة عملية خارجية.

قيد العمل المتوازي ولا تعتبر Promise.all ضابطاً

تنتظر Promise.all عدة عمليات، لكن إنشاء وعد لكل عنصر أولاً قد يرهق المجمع قبل الوصول لأي await. قيد عدد المدخلات واستعمل استراتيجية تزامن مراجعة في الموائم. لا يلغي رفض وعد بقية الأعمال التي بدأت تلقائياً. حدد هل تسمح الحالة بنتائج جزئية مستقلة أو تتطلب كل المصادر؛ ويؤثر ذلك في الحالة والإفصاح والتنظيف. لا تعوض فشل مصدر صلاحيات بافتراض سماح لأن بديلاً وصفياً مقبول في موضع آخر. قرار الجزئي تابع لصحة المجال لا لتسهيل جمع الوعود.

حدد مالكاً للإعادة واحفظ عدم يقين الكتابة

قد تضاعف إعادات العميل والمسار والمصدر المحاولات إن وضع كل منها سياسة مستقلة. حدد مالكاً وفئات قابلة للإعادة وعدداً محدوداً وفحصاً للوقت المتبقي. قد تقبل قراءة الإعادة وفق معناها، بينما تحدث مهلة الكتابة بعد الحفظ. لا تدع آثار مرة واحدة من معالج HTTP ولا تفترض أن الاستثناء يثبت عدم تغيير التخزين. استخدم هوية طلب مجال وبروتوكول تسوية للكتابة؛ ولا تضع الضمان في غلاف إعادة عام لا يعرف آثار العملية. ينبغي أن يتفق التزام الخدمة مع ما يعد به رد المسار.

الأخطاء الشائعة وإصلاحها

يعلن المسار نجاحاً ويفشل عمل منفصل

لماذا يحدث؟
افتقد وعد المصدر مالكاً ينتظره أو يحفظه دائماً.
كيف تصلحه؟
انتظر عمل الطلب أو أرسله ببروتوكول طابور دائم صريح.
كيف تتجنب تكراره؟
اختبر رفض المصدر قبل إعادة النجاح.

يجدد كل انتقال مهلة كاملة

لماذا يحدث؟
لم يمرر موعد نهائي للعملية.
كيف تصلحه؟
مرر الميزانية المشتركة المتبقية واحترمها.
كيف تتجنب تكراره؟
اختبر نفاد الميزانية قبل بدء العمل.

يترك رفض وعد اتصالات أخرى تعمل

لماذا يحدث؟
اختلط جمع الوعود بالإلغاء.
كيف تصلحه؟
استخدم الإلغاء المدعوم ومسؤولية تنظيف واضحة.
كيف تتجنب تكراره؟
راقب تحرير الموارد في دمج موائم معزول.

اختبر فهمك

1. ماذا لا تثبته دالة الميزانية؟

اعرض الحل المشروح

تثبت الحساب لقيم زمن معلنة فقط، ولا تثبت الساعة أو فرض المهلة أو إيقاف استعلام أو تحرير مكان بالمجمع. تحتاج هذه الادعاءات دمج الموائم وبرنامج التشغيل. احفظ الدليل الضيق وافحص التمرير والتنظيف مستقلاً حيث يؤذن.

2. لماذا قد يترك رفض Promise.all عملاً مكلفاً نشطاً؟

اعرض الحل المشروح

قد تكون العمليات الأخرى بدأت، ولا يلغيها رفض المجموع. يمرر مالكوها الإلغاء المدعوم ويحررون الموارد. قيد العمل قبل بدئه؛ فلا تلغي سياسة تزامن وضعت بعد إنشاء كل الوعود التفرع الأولي.

أهم ما تعلمته

  • يحتاج الوعد المنتظر ميزانية مصدر ومسؤول موارد.
  • تتبع الإعادة والجزئي دلالات المجال.

المراجع الرسمية