58. مقدمة إلى الـ Subjects (البث المتعدد)
الـ Observables القياسية هي Unicast (أو 'باردة'): يحصل كل مشترك على تنفيذه المستقل لمنطق Observable (على سبيل المثال، كل مشترك HTTP يشغل طلباً جديداً).
Subjects هي نوع خاص من Observable وهي Multicast (أو 'ساخنة'): تسمح لعدة مراقبين بالاشتراك في نفس التنفيذ. Subject هو كلاهما: مراقب (يمكنه تلقي القيم عبر next()) و Observable (يمكن الاشتراك فيه).
Subject الأساسي (Subject<T>)
Subject الأساسي هو تدفق لا يحمل حالة. يطلق قيماً فقط للمشتركين الذين يستمعون حالياً بعد إطلاق القيمة.
حالة الاستخدام: مُطلقو الأحداث في الخدمات لتواصل المكونات غير ذات الصلة (يحل محل EventEmitter الخاص بـ Angular في الخدمات).
typescript import { Subject } from 'rxjs';
const statusUpdate$ = new Subject
// يبدأ المشترك A في الاستماع statusUpdate$.subscribe(message => console.log('Sub A:', message));
// يطلق التدفق قيمة statusUpdate$.next('System Initialized'); // الإخراج: Sub A: System Initialized
// يبدأ المشترك B في الاستماع لاحقاً statusUpdate$.subscribe(message => console.log('Sub B:', message));
statusUpdate$.next('User logged in'); /* الإخراج: Sub A: User logged in Sub B: User logged in */
statusUpdate$.complete(); // ينهي التدفق لجميع المشتركين
الأهمية: إذا كان المشترك B قد اشترك بعد إطلاق 'System Initialized'، لكان قد فاتته تلك الرسالة. يقدم الدرس التالي Subjects التي تخزن الحالة.