مقدمة
جوهر RXJS هو الكائن الذي يمكن ملاحظته ، وهو مزيج من البرمجة غير المتزامنة والفعاليات باستخدام تسلسل بيانات يمكن ملاحظته.
نموذج البرمجة غير المتزامن الذي يشبه إلى حد كبير هذا الوعد. الوعد هو نموذج غير متزامن يعتمد على تغييرات الدولة. بمجرد دخول حالة الانتظار إلى حالة ناجحة أو فاشلة ، لا يمكن تعديلها مرة أخرى. عندما تتغير الدولة ، يمكن للمشترك الحصول على قيمة واحدة فقط ؛ في حين أن الملاحظة هو نموذج برمجة غير متزامن يعتمد على التسلسلات. مع تغير التسلسل ، يمكن للمشترك الحصول على قيم جديدة باستمرار. علاوة على ذلك ، يوفر Promise فقط آلية رد اتصال وليس لديه المزيد من العمليات لدعم المعالجة المعقدة للنتائج. توفر الملاحظة مجموعة متنوعة من المشغلين لمعالجة نتائج التشغيل لتلبية منطق التطبيق المعقد.
في البرمجة الفعلية ، نتعامل بشكل أساسي مع ثلاثة كائنات: مراقبة ، مراقب ، اشتراك :
خذ حدث النقر لعنصر ما كمثال لمعرفة كيفية استخدام الملاحظة:
var clickstream = new rx.Observable (observer => {var handle => evt => observer.next (evt) ؛ element.addeventListener ('click' ، handle) ؛ return () => element.removeeventLister ('click' ، handle) ؛}) ؛ clickstream.subscrib evt.id) ؛} ، err => {console.error ('onerror') ؛} ، () => {console.log ('onComplete') ؛}) ؛ setTimeout (() => {contricprient.unsubscribe () ؛} ، 1000) ؛ ألن يكون الأمر مزعجًا جدًا إذا احتاج كل حدث إلى لف مثل هذا؟ لذلك ، يوفر لنا RXJS وظيفة مريحة: Observable.fromEvent .
مشغلات الارتباطات الشائعة: Concat ، Merge ، Combinelates ، إلخ.
عمليات الإسقاط: MAP ، Flatmap ، يجب تقديم خريطة Flatm
مرشح: مرشح ، متميزات ،
تصنيف المشغل: المشغلين حسب الفئات
معالجة الخطأ: الصيد ، إعادة المحاولة ، أخيرًا
إلغاء الضغط: Debounce ، خنق ، عينة ، قابلة للتوقف
تقليل: المخزن المؤقت ، BufferWithCount ، BufferWithTime
لإتقان مشغلي الملاحظة ، يجب أولاً أن تتعلم فهم مخطط التسلسل:
تمثل الأسهم تسلسلات تتغير بمرور الوقت. على سبيل المثال ، النقر فوق الماوس بشكل مستمر على عنصر ما ، وتمثل الدائرة تأثير التسلسل في الخارج. على سبيل المثال ، ستؤدي كل نقرة عن العنصر إلى استدعاء الحدث ، والأرقام الموجودة في الدائرة هي المعلومات المنبعثة من الخارج. على سبيل المثال ، سيكون لكل حدث تشغيل كائن حدث ، يمثل بعض المعلومات من هذه العملية.
لاستخدام مرن يمكن ملاحظته للتعامل مع المنطق المعقد ، يجب أن تتعلم استخدام المشغلين الذين يوفرونه. قمت بتقسيم المشغلين إلى فئتين: تشغيل التسلسل الفردي وتشغيل التسلسل المركب. تشير عملية التسلسل الفردي إلى عمليات التشغيل التي أجريت على تسلسل واحد. تشير عملية تسلسل المركب إلى المشغلين الذين يعالجون تسلسلين أو أكثر. من الصعب فهم عملية تسلسل المركب.
دعونا نلقي نظرة أولاً على عمليات التسلسل الفردي ، مع أخذ عمليات الخريطة كمثال:
تتمثل عملية الخريطة في تحويل المعلومات المنقولة إلى الخارج في تسلسل في كل مرة. كما هو موضح في الشكل أعلاه ، تضاعف MAP قيمة الإرسال في كل مرة بحلول عشرة. ثم عندما يشترك المشترك ، لم تعد قيمة الاشتراك التي تم الحصول عليها في كل مرة هي 123 الأصلية ولكن المحول 10 20 30. من خلال مخططات التسلسل ، يمكنك بسهولة فهم عمليات الملاحظة.
لنأخذ الدمج كمثال
الغرض من عملية الدمج هو توليف تسلسلتين مستقلتين في تسلسل واحد. في الأصل ، مع تقدم الوقت ، يقوم التسلسل 1 بنقل A إلى 100 مللي ثانية ، B في 200ms ، و C في 300 مللي ثانية ، سيتلقى المشترك ثلاث قيم ABC في 400 مللي ثانية ؛ Sequence 2 ينقل D في 150ms ، E في 250ms ، و F في 350ms ، ويتلقى مشتركها ثلاث قيم DEF خلال 400 مللي ثانية. سيتلقى التسلسل الجديد بعد الدمج ABCDEF ضمن 400 مللي ثانية (لاحظ الطلب).
فهم المشغلين المشتركين:
قابل للملاحظة. range: ينقل عدد معين من تسلسل القيمة.
يمكن ملاحظته. tooarray: يحول جميع القيم المنبعثة إلى صفيف عند اكتمال التسلسل.
الملاحظة.
يمكن ملاحظته.
obscable.combinelatest: على غرار Promiseall ، سيتم تنفيذها فقط بعد جميع التسلسلات نتائج.
يمكن ملاحظتها. scan: يمكن تجميع القيم المنبعثة في التسلسل. على غرار تقليل ، سوف يقلل تقليل قيم التسلسل بأكمله وإرسال قيمة نهائية عند اكتمال التسلسل.
قابلة للملاحظة: احصل على عينة معينة من تسلسل مستمر
يمكن ملاحظته: دمج تسلسلات متعددة في واحدة ، ويمكن استخدامها كـ OR
يمكن ملاحظته. TimeStamp: يمكن الحصول على وقت نقل كل قيمة نقل
يمكن ملاحظته.
يمكن ملاحظته.
لخص
ما سبق هو المحتوى الكامل لهذه المقالة. آمل أن يكون محتوى هذه المقالة من بعض المساعدة في دراسة أو عمل الجميع. إذا كان لديك أي أسئلة ، فيمكنك ترك رسالة للتواصل.