البرمجة التفاعلية في JavaScript (Node.js): مكتبة RxJS

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

البرمجة التفاعلية في JavaScript (Node.js) باستخدام RxJS

\n\n

البرمجة التفاعلية هي نموذج يركز على تدفقات البيانات غير المتزامنة ونشر التغييرات. في بيئة JavaScript (Node.js)، تعد RxJS (الإضافات التفاعلية لـ JavaScript) واحدة من أقوى المكتبات لتنفيذ هذا النموذج. توفر أدوات للعمل مع Observable (التسلسلات القابلة للملاحظة)، مما يسمح للمطورين بمعالجة الأحداث وطلبات HTTP والمؤقتات ومصادر البيانات غير المتزامنة الأخرى بكفاءة.

\n\n

المفاهيم الأساسية لـ RxJS

\n

تعتمد RxJS على ثلاثة مكونات رئيسية:

\n
    \n
  • Observable (كائن قابل للملاحظة) — يمثل تدفق بيانات يمكنه توليد قيم بمرور الوقت.
  • \n
  • Observer (المراقب) — كائن يشترك في Observable ويستجيب لوصول بيانات جديدة (next) أو أخطاء (error) أو إنهاء التدفق (complete).
  • \n
  • Subscription (الاشتراك) — نتيجة استدعاء طريقة subscribe(). يسمح بإدارة دورة حياة الاشتراك (مثل إلغائه).
  • \n
\n

كما تلعب العوامل (operators) دورًا مهمًا — وهي دوال نقية تسمح بتحويل وتصفية ودمج وجمع تدفقات البيانات.

\n\n

التثبيت والإعداد

\n

لاستخدام RxJS في مشروع Node.js، يكفي تثبيت الحزمة عبر npm:

\n
npm install rxjs
\n

بعد التثبيت، المكتبة جاهزة للاستخدام. قم باستيراد المكونات المطلوبة:

\n
const { Observable, of, from, interval } = require('rxjs');\nconst { map, filter, take } = require('rxjs/operators');
\n\n

إنشاء Observable

\n

هناك عدة طرق لإنشاء تدفقات البيانات. دعنا نستعرض الأساسيات:

\n\n

1. الإنشاء من مصفوفة

\n
const { from } = require('rxjs');\n\nconst numbers$ = from([1, 2, 3, 4, 5]);\nnumbers$.subscribe({\n    next: value => console.log(`تم الاستلام: ${value}`),\n    complete: () => console.log('تم إنهاء التدفق')\n});
\n

نتيجة التنفيذ:

\n
تم الاستلام: 1\nتم الاستلام: 2\nتم الاستلام: 3\nتم الاستلام: 4\nتم الاستلام: 5\nتم إنهاء التدفق
\n\n

2. توليد قيم دورية

\n
const { interval } = require('rxjs');\nconst { take } = require('rxjs/operators');\n\nconst timer$ = interval(1000).pipe(\n    take(4) // نقتصر على 4 قيم\n);\n\ntimer$.subscribe({\n    next: value => console.log(`نقرة ${value}`),\n    complete: () => console.log('تم إنهاء المؤقت')\n});
\n

الإخراج (بفاصل زمني قدره 1 ثانية):

\n
نقرة 0\nنقرة 1\nنقرة 2\nنقرة 3\nتم إنهاء المؤقت
\n\n

العمل مع العوامل (Operators)

\n

العوامل هي قلب RxJS. تسمح بتحويل البيانات أثناء التدفق. دعنا نستعرض عاملين شائعين:

\n
    \n
  • map — يحول كل قيمة في التدفق.
  • \n
  • filter — يمرر فقط القيم التي تفي بالشرط.
  • \n
\n\n
const { of } = require('rxjs');\nconst { map, filter } = require('rxjs/operators');\n\nconst source$ = of(1, 2, 3, 4, 5, 6);\n\nsource$.pipe(\n    filter(value => value % 2 === 0), // نترك فقط الأعداد الزوجية\n    map(value => value * 10)          // نضرب كل قيمة في 10\n).subscribe({\n    next: value => console.log(`النتيجة: ${value}`),\n    complete: () => console.log('تم')\n});
\n

النتيجة:

\n
النتيجة: 20\nالنتيجة: 40\nالنتيجة: 60\nتم
\n\n

معالجة الأخطاء في التدفقات التفاعلية

\n

يوفر RxJS آليات مدمجة لمعالجة الأخطاء. على سبيل المثال، العامل catchError يسمح باعتراض الاستثناء ومواصلة التنفيذ:

\n
const { throwError, of } = require('rxjs');\nconst { catchError } = require('rxjs/operators');\n\nconst error$ = throwError(() =>                    

توصيات