بواعث الأحداث هي كائنات في NodeJS تطلق الأحداث عن طريق إرسال رسالة للإشارة إلى حدوث إجراء.
يوفر Node.js وحدة أحداث مضمنة. يحتوي على فئة باعث الأحداث التي تتيح لك إنشاء أحداث مخصصة ومعالجتها عبر وظائف رد الاتصال.
هنا سوف تتعلم كيفية إرسال الأحداث ، والاستماع إلى بيانات الأحداث والتعامل معها ، والتعامل مع أخطاء الأحداث في NodeJS.
انبعاث الأحداث
وحدة الأحداث هي جزء أساسي من بيئة جانب الخادم Node.js. وبالتالي ، لا تحتاج إلى تثبيته ، ولكن قبل استخدام ملف الحدث فئة ، يجب عليك الاستيراد من وحدة الأحداث وإنشاء مثيل لها.
مثل ذلك:
مقدار ثابت EventEmitter = يتطلب("الأحداث") ؛
// إنشاء الحدث
مقدار ثابت myEmitter = جديد EventEmitter () ،
يمكنك إرسال الأحداث باستخدام ملف الحدث'س ينبعث طريقة. ال ينبعث الطريقة تأخذ اسم الحدث وعدد تعسفي من الحجج كمعلمات.
بمجرد استدعاء ينبعث الطريقة ، فإنه ينبعث من تمرير اسم الحدث. ثم يستدعي بشكل متزامن كل مستمع للحدث بالترتيب الذي سجلته به ، ويمرر الوسيطات المقدمة إلى كل منهما. أخيرًا ، يعود حقيقي إذا كان للحدث مستمعين و خطأ شنيع إذا لم يكن لديها أي مستمعين.
على سبيل المثال:
myEmitter.emit ("TestEvent", "فو", "حاجِز", 1, 2);
في كتلة التعليمات البرمجية أعلاه ، لقد نجحت TestEvent مثل اسم الحدث، و "فو,” "حاجِز,” 1، و 2 كالحجج. عند تشغيل مجموعة التعليمات البرمجية أعلاه ، سيتم إخطار جميع المستمعين الذين يستمعون إلى ملف TestEvent حدث. سوف تستدعي هؤلاء المستمعين بالحجج المقدمة.
الاستماع للأحداث
يمكنك الاستماع إلى الأحداث المنبعثة باستخدام ملف الحدث'س على طريقة. ال على الطريقة تأخذ اسم الحدث ووظيفة رد الاتصال كمعلمات. عندما يكون الحدث مع اسم الحدث مرت إلى على الطريقة ، تستدعي وظيفة رد الاتصال الخاصة بها. تقوم هذه الطريقة بإرجاع مرجع إلى الحدث، مما يسمح لك بربط مكالمات متعددة.
على سبيل المثال:
// المستمع الأول
myEmitter.on ("TestEvent", () => {
console.log ("الاختبار المنبعث !!!");
}); // TestEvent المنبعث !!!// المستمع الثاني
myEmitter.on ("TestEvent"، (... أرغس) => {
args = args.join (", ");
وحدة التحكم.سجل(الحدث المنبعث من الحجج التالية: $ {args}`);
}); // حدث صادر بالوسيطات التالية: foo، bar، 1، 2
myEmitter.emit ("TestEvent", "فو", "حاجِز", 1, 2);
في كتلة التعليمات البرمجية أعلاه ، عندما يكون ملف TestEvent يصدر الحدث ، سوف يستدعي المستمعون للحدث وظائف رد الاتصال الخاصة بهم. سوف يتفاعل المستمعون بالترتيب الذي قمت بتسجيلهم ، مما يعني أن رد نداء "المستمع الأول" سيتم تشغيله قبل الثاني ، وهكذا.
يمكنك تغيير هذا السلوك باستخدام الحدث'س المستمع المسبق طريقة. تأخذ هذه الطريقة نفس المعلمات مثل على طريقة. الفرق هو أن هذه الطريقة تتفاعل مع الحدث أولاً ، بغض النظر عن وقت تسجيله.
على سبيل المثال:
myEmitter.on ("TestEvent", () => {
console.log ("الاختبار المنبعث !!!");
});myEmitter.prependListener ("TestEvent", () => {
console.log ("ينفذ أولاً")
})
// console.log (myEmitter.listeners ("TestEvent"));
myEmitter.emit ("TestEvent", "فو", "حاجِز", 1, 2);
عند تنفيذ كتلة التعليمات البرمجية أعلاه ، سيتم تسجيل "Executes first" أولاً في وحدة التحكم ، متبوعًا بـ "TestEvent Emitted !!!" بغض النظر عن الترتيب الذي قمت بتسجيله فيه بسبب المستمع المسبق طريقة.
إذا قمت بتسجيل العديد من المستمعين مع المستمع المسبق الطريقة ، سيتم تشغيلها بالترتيب من الأخير إلى الأول.
لاحظ ترتيب الباعث والمستمعين. يأتي المستمعون دائمًا قبل الباعث. هذا الترتيب لأن المستمعين يجب أن يكونوا بالفعل يستمعون للحدث قبل أن يرسله المرسل.
للسياق ، ضع في اعتبارك كتلة التعليمات البرمجية أدناه:
myEmitter.emit ("TestEvent", "فو", "حاجِز", 1, 2);
myEmitter.on ("TestEvent", () => {
console.log ("الاختبار المنبعث !!!");
});
إذا قمت بتشغيل كتلة التعليمات البرمجية أعلاه ، فلن يحدث شيء لأنه في الوقت الذي أرسل فيه المرسل الحدث ، لم يكن هناك مستمع يستمع إلى الحدث.
الاستماع إلى الأحداث مرة واحدة
بناءً على متطلباتك ، قد تحتاج إلى التعامل مع بعض الأحداث مرة واحدة فقط في دورة حياة التطبيق الخاص بك. يمكنك تحقيق ذلك باستخدام الحدث'س مرة واحدة طريقة.
تأخذ هذه الطريقة نفس الحجج مثل على طريقة ويعمل بالمثل. الاختلاف الوحيد هو أن المستمعين مسجلين في مرة واحدة طريقة الاستماع للحدث مرة واحدة فقط.
على سبيل المثال:
myEmitter.once ("حدث مفرد", () => {
console.log ("تم التعامل مع الحدث مرة واحدة");
});
myEmitter.emit ("حدث مفرد"); // تم التعامل مع الحدث مرة واحدة
myEmitter.emit ("حدث مفرد"); // تم التجاهل
myEmitter.emit ("حدث مفرد"); // تم التجاهل
سيؤدي تشغيل كتلة التعليمات البرمجية إلى تسجيل "تم التعامل مع الحدث مرة واحدة" إلى وحدة التحكم مرة واحدة ، بغض النظر عن عدد المرات التي يرسل فيها المرسل الحدث.
المستمعون المسجلون مع مرة واحدة طريقة الرد على الحدث بالترتيب الذي قمت بتسجيله. يمكنك تغيير هذا السلوك باستخدام prependOnceListener الطريقة التي تعمل مثل المستمع المسبق. الاختلاف الوحيد هو أن المستمعين مسجلين في مرة واحدة طريقة الاستماع للحدث مرة واحدة فقط.
معالجة الأخطاء مع بواعث الأحداث
يجب أن تعتني ب التعامل مع أخطاء جافا سكريبت بشكل مناسب والمستمعين للأحداث ليسوا استثناء. ستؤدي الأخطاء التي لم تتم معالجتها منها إلى إنهاء عملية Node.js وتعطل تطبيقك.
للتعامل مع حدث خطأ ، يجب أن يكون لدى أحد مستمعي الحدث على الأقل اسم الحدث ضبط ل خطأ.
على سبيل المثال:
myEmitter.on ("خطأ"، (خطأ) => {
وحدة التحكم.خطأ(خطأ: $ {error}`);
});
سيؤدي وجود مستمع يتعامل مع خطأ محتمل ، كما هو الحال في كتلة التعليمات البرمجية أعلاه ، إلى إيقاف التطبيق من التعطل عند حدوث خطأ.
على سبيل المثال:
myEmitter.emit ("خطأ"، خطأ جديد ("هذا خطأ"));
سيؤدي تشغيل كتلة التعليمات البرمجية أعلاه إلى تسجيل "هذا خطأ" في وحدة التحكم لأن المستمع يتعامل مع أحداث الخطأ.
إدارة مستمعي الأحداث
ال الحدث يحتوي class على عدة طرق تسمح لك بالتعامل مع مستمعي الأحداث وإدارتهم. يمكنك الحصول على مستمعين لحدث ما وإزالتهم وتعيين الحد الأقصى لعدد المستمعين للحدث.
هنا جدول يحتوي على الحدث طرق يمكنك من خلالها معالجة مستمعي الأحداث باستخدام:
طريقة | الحجج | قيمة الإرجاع |
---|---|---|
listenerCount | اسم الحدث | ترجع عدد المستمعين المشتركين في حدث |
المستمعين | اسم الحدث | إرجاع مجموعة من المستمعين |
إزالة المستمع | اسم الحدث | يزيل مستمع واحد على الأقل من eventName المحدد. |
إزالة جميع المستمعين | اسم الحدث | يزيل كل المستمعين لحدث معين. إذا لم تحدد اسم حدث ، فإن استدعاء الأسلوب هذا سيزيل جميع المستمعين إلى EventEmitter. |
setMaxListeners | رقم | يغير الحد الأقصى الافتراضي لعدد المستمعين لكل حدث. استخدم اللانهاية أو الصفر للإشارة إلى عدد غير محدود من المستمعين. بشكل افتراضي ، يمكنك فقط اشتراك عشرة مستمعين في الحدث. |
يمكنك فقط استدعاء هذه الطرق على ملف الحدث مثال.
على سبيل المثال:
myEmitter.removeListener ("TestEvent");
يزيل مقطع التعليمات البرمجية أعلاه مستمعًا واحدًا لملف TestEvent حدث.
أهمية بواعث الأحداث
تتبنى Node.js نموذج البرمجة الذي يحركه الحدث مع دعمه لبواعث الأحداث والمستمعين. البرمجة المدفوعة بالأحداث هي أحد الأسباب التي تجعل برامج Node.js أسرع وأكثر وضوحًا من بعض البدائل. يمكنك مزامنة أحداث متعددة بسهولة ، مما يؤدي إلى تحسين الكفاءة.