0Pricing
Angular Academy · درس

عوامل معالجة الأخطاء

استعيدوا العمل باستخدام catchError وretry

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

الأخطاء في observables

عندما يبعث observable خطأً، فإنه ينتهي: لا مزيد من القيم، ويعمل معالج الخطأ. تتيح معاملات الأخطاء الاسترداد أو إعادة المحاولة أو تحويل الأخطاء بدلًا من إيقاف التدفق.

مسار الخطأ

عالجوا الأخطاء في المراقب أو باستخدام المعاملات. ومن دون معالجة، قد يؤدي الخطأ غير المعالج إلى إيقاف الاشتراك.

this.http.get('/api/data').subscribe({
  next: d => console.log(d),
  error: err => console.error('failed', err)
});

catchError

يعترض catchError الخطأ ويعيد observable بديلًا، مما يتيح استمرار التدفق بسلاسة.

import { catchError, of } from 'rxjs';

this.http.get('/api/data').pipe(
  catchError(err => {
    console.error(err);
    return of([]); // fallback value
  })
).subscribe(data => console.log(data));

إعادة طرح الأخطاء انتقائيًا

يمكنكم داخل catchError فحص الخطأ وتحديد ما إذا كنتم ستستردون منه أو ستعيدون طرحه باستخدام throwError.

import { catchError, throwError, of } from 'rxjs';

source$.pipe(
  catchError(err =>
    err.status === 404 ? of(null) : throwError(() => err)
  )
).subscribe();

retry

يعيد retry(n) الاشتراك في المصدر حتى n مرة عند حدوث خطأ — وهو مفيد لفشل الشبكة المؤقت.

import { retry } from 'rxjs';

this.http.get('/api/flaky').pipe(
  retry(2) // try up to 3 times total
).subscribe(d => console.log(d));

retry مع الإعدادات

يضيف الشكل الكائني تأخيرًا بين المحاولات، ويدعم أيضًا دالة التراجع التدريجي، مما يتجنب إغراق الخادم بالطلبات.

this.http.get('/api/flaky').pipe(
  retry({ count: 3, delay: 1000 })
).subscribe(d => console.log(d));

التراجع التدريجي بأسلوب retryWhen

بالنسبة إلى التراجع الأُسّي، يمكن أن يكون خيار delay دالةً تعيد observable يؤخر المحاولات تدريجيًا مدة أطول مع كل محاولة.

import { timer } from 'rxjs';

source$.pipe(
  retry({
    delay: (err, count) => timer(count * 1000)
  })
).subscribe();

catchError بعد retry

ادمجوهما: أعيدوا محاولة حالات الفشل المؤقتة، ثم انتقلوا بسلاسة إلى قيمة بديلة عند استنفاد المحاولات.

this.http.get('/api/data').pipe(
  retry({ count: 2, delay: 500 }),
  catchError(() => of([]))
).subscribe(data => console.log(data));

أهمية موضع المعامل

يحدد موضع catchError في pipe نطاق تأثيره. فعند وضعه داخل switchMap، يعالج الأخطاء لكل طلب داخلي مع إبقاء التدفق الخارجي نشطًا؛ أما وضعه في النهاية فيعالج كل شيء.

term$.pipe(
  switchMap(t => this.http.get('/api?q=' + t).pipe(
    catchError(() => of([])) // outer stream survives
  ))
).subscribe();

EMPTY كقيمة بديلة صامتة

يؤدي إرجاع EMPTY من catchError إلى إكمال التدفق من دون قيمة — وهو مفيد عندما تريدون ابتلاع الخطأ وعدم إرسال أي شيء.

import { EMPTY, catchError } from 'rxjs';

source$.pipe(
  catchError(() => EMPTY)
).subscribe();

finalize للتنظيف

ينفذ finalize دالة استدعاء عندما ينتهي التدفق لأي سبب — عند الاكتمال أو الخطأ أو إلغاء الاشتراك. اقرنوه بمعالجة الأخطاء لإعادة ضبط حالة التحميل دائمًا.

import { finalize, catchError, of } from 'rxjs';

this.loading = true;
source$.pipe(
  catchError(() => of([])),
  finalize(() => this.loading = false)
).subscribe();

تحقق سريع

اختبروا مدى فهمكم لمعالجة الأخطاء.

مراجعة: معاملات معالجة الأخطاء

تنهي الأخطاء التدفق ما لم تتم معالجتها.

  • catchError: الاسترداد بإرجاع observable بديل.
  • retry: إعادة الاشتراك عند الفشل، مع تأخير أو تراجع تدريجي اختياري.
  • يتحكم الموضع، داخل switchMap أو في النهاية، في نطاق التأثير.

لقد أكملتم درس RxJS Operators in Depth.

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

هل درس «عوامل معالجة الأخطاء» مجاني؟

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

ماذا ستتعلم في «عوامل معالجة الأخطاء»؟

استعيدوا العمل باستخدام catchError وretry تتمرن على Angular Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

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

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

كم من الوقت يستغرق درس «عوامل معالجة الأخطاء»؟

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

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

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

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

  1. عوامل التحويل
  2. عوامل التصفية
  3. عوامل الدمج
  4. عوامل معالجة الأخطاء
← العودة إلى Angular Academy