פולטי אירועים הם אובייקטים ב-NodeJS שמפעילים אירועים על ידי שליחת הודעה לאותת שהתרחשה פעולה.
Node.js מספק מודול אירועים מובנה. הוא מכיל מחלקה פולטת אירועים המאפשרת לך ליצור ולטפל באירועים מותאמים אישית באמצעות פונקציות התקשרות חוזרת.
כאן תלמד כיצד לפלוט אירועים, להאזין ולטפל בנתוני אירועים ולטפל בשגיאות אירועים ב-NodeJS.
פליטת אירועים
מודול האירועים הוא חלק מרכזי ב סביבת צד השרת של Node.js. לפיכך, אינך צריך להתקין אותו, אלא לפני השימוש ב פולט אירועים מחלקה, עליך לייבא ממודול האירועים ולהפעיל אותו.
ככה:
const EventEmitter = לִדרוֹשׁ("אירועים");
// מופע של EventEmitter
const myEmitter = חָדָשׁ EventEmitter();
אתה יכול לשדר אירועים באמצעות פולט אירועיםשל לִפְלוֹט שיטה. ה לִפְלוֹט השיטה לוקחת שם אירוע ומספר שרירותי של ארגומנטים כפרמטרים.
ברגע שאתה מתקשר ל לִפְלוֹט השיטה, היא פולטת את המעבר שם אירוע. לאחר מכן הוא מתקשר באופן סינכרוני לכל אחד מהמאזינים של האירוע לפי הסדר שרשמת אותם, ומעביר את הטיעונים שסופקו לכל אחד. לבסוף, זה חוזר נָכוֹן אם לאירוע היו מאזינים ו שֶׁקֶר אם לא היו לו מאזינים.
לדוגמה:
myEmitter.emit("TestEvent", "פו", "בַּר", 1, 2);
בבלוק הקוד למעלה עברת TestEvent בתור ה שם אירוע, ו "פו,” "בַּר,” 1, ו 2 כמו הטיעונים. כאשר בלוק הקוד שלמעלה פועל, הוא יודיע לכל המאזינים שמאזינים ל- TestEvent מִקרֶה. זה יתקשר לאותם מאזינים עם הטיעונים הנתונים.
האזנה לאירועים
אתה יכול להאזין לאירועים שנפלטו באמצעות פולט אירועיםשל עַל שיטה. ה עַל השיטה לוקחת שם אירוע ופונקציית התקשרות חוזרת כפרמטרים. כאשר האירוע עם ה שם אירוע עבר לתוך ה עַל השיטה נפלטת, היא מפעילה את פונקציית ה-callback שלה. שיטה זו מחזירה הפניה ל- פולט אירועים, המאפשר לך לשרשר שיחות מרובות.
לדוגמה:
// מאזין ראשון
myEmitter.on("TestEvent", () => {
console.log("TestEvent נפלט!!!");
}); // TestEvent Emitted!!!// מאזין שני
myEmitter.on("TestEvent", (...args) => {
args = args.join(", ");
לְנַחֵם.עֵץ(`אירוע שנפלט עם הטיעונים הבאים: ${args}`);
}); // אירוע שנפלט עם הארגומנטים הבאים: foo, bar, 1, 2
myEmitter.emit("TestEvent", "פו", "בַּר", 1, 2);
בבלוק הקוד למעלה, כאשר ה TestEvent אירוע פולט, המאזינים לאירוע יפעילו את פונקציות ההתקשרות שלהם. המאזינים יגיבו לפי הסדר שרשמתם אותם, כלומר ההתקשרות חזרה של "המאזין הראשון" תפעל לפני השני, וכן הלאה.
אתה יכול לשנות התנהגות זו באמצעות פולט אירועיםשל prependListener שיטה. שיטה זו לוקחת את אותם פרמטרים כמו ה- עַל שיטה. ההבדל הוא ששיטה זו מגיבה לאירוע תחילה, ללא קשר לזמן שבו אתה רושם אותו.
לדוגמה:
myEmitter.on("TestEvent", () => {
console.log("TestEvent נפלט!!!");
});myEmitter.prependListener("TestEvent", () => {
console.log("מבצע קודם")
})
// console.log (myEmitter.listeners("TestEvent"));
myEmitter.emit("TestEvent", "פו", "בַּר", 1, 2);
כאשר בלוק הקוד שלמעלה מופעל, "Executes first" יירשם תחילה למסוף, ואחריו "TestEvent Emitted!!!" ללא קשר לסדר שבו רשמת אותם בגלל ה prependListener שיטה.
אם אתה רושם כמה מאזינים עם prependListener בשיטה, הם יפעלו לפי הסדר מהאחרון לראשון.
שימו לב לסידור הפולט והמאזינים. המאזינים תמיד באים לפני הפולט. סידור זה נובע מכך שהמאזינים חייבים כבר להאזין לאירוע לפני שהפולט פולט אותו.
להקשר, שקול את גוש הקוד שלהלן:
myEmitter.emit("TestEvent", "פו", "בַּר", 1, 2);
myEmitter.on("TestEvent", () => {
console.log("TestEvent נפלט!!!");
});
אם אתה מפעיל את בלוק הקוד שלמעלה, שום דבר לא יקרה מכיוון שבזמן שהפולט פלט את האירוע, אף מאזין לא הקשיב לאירוע.
מאזין לאירועים פעם אחת
בהתאם לדרישות שלך, ייתכן שתצטרך לטפל באירועים מסוימים רק פעם אחת במחזור החיים של היישום שלך. אתה יכול להשיג זאת באמצעות פולט אירועיםשל פַּעַם שיטה.
שיטה זו לוקחת את אותם טיעונים כמו ה- עַל שיטה ועובדת באופן דומה. ההבדל היחיד הוא שהמאזינים נרשמו עם פַּעַם שיטה להאזין לאירוע פעם אחת בלבד.
לדוגמה:
myEmitter.once("אירוע יחיד", () => {
console.log("אירוע טופל פעם אחת");
});
myEmitter.emit("אירוע יחיד"); // אירוע שטופל פעם אחת
myEmitter.emit("אירוע יחיד"); // התעלמו
myEmitter.emit("אירוע יחיד"); // התעלמו
הפעלת בלוק הקוד תרשום את "אירוע מטופל פעם אחת" לקונסולה פעם אחת בלבד, ללא קשר לתדירות הפולטת את האירוע.
מאזינים רשומים ב- פַּעַם שיטה להגיב לאירוע לפי הסדר שאתה רושם אותם. אתה יכול לשנות התנהגות זו באמצעות prependOnceListener שיטה, שעובדת כמו prependListener. ההבדל היחיד הוא שהמאזינים נרשמו עם פַּעַם שיטה להאזין לאירוע פעם אחת בלבד.
טיפול בשגיאות עם פולטי אירועים
כדאי לדאוג לטפל בשגיאות JavaScript כראוי ומאזיני אירועים אינם יוצאי דופן. שגיאות לא מטופלות מהן יגרמו ליציאה של תהליך Node.js ולקריסת האפליקציה שלך.
כדי לטפל באירוע שגיאה, לפחות אחד מהמאזינים של האירוע חייב לקבל את זה שם אירוע מכוון ל שְׁגִיאָה.
לדוגמה:
myEmitter.on("שְׁגִיאָה", (שגיאה) => {
לְנַחֵם.שְׁגִיאָה(`שגיאה: ${error}`);
});
מתן מאזין לטפל בשגיאה אפשרית, כמו בגוש הקוד למעלה, ימנע מהאפליקציה לקרוס כאשר מתרחשת שגיאה.
לדוגמה:
myEmitter.emit("שְׁגִיאָה", שגיאה חדשה("זוהי שגיאה"));
הפעלת בלוק הקוד שלמעלה תרשום "זוהי שגיאה" למסוף מכיוון שמאזין מטפל באירועי שגיאה.
ניהול מאזיני אירועים
ה פולט אירועים לכיתה מספר שיטות המאפשרות לך לתמרן ולנהל מאזינים לאירועים. אתה יכול לקבל מאזינים של אירוע, להסיר אותם ולהגדיר את מספר המאזינים המקסימלי לאירוע.
הנה טבלה המכילה פולט אירועים שיטות בהן תוכל לתמרן מאזיני אירועים:
שיטה | טיעונים | ערך החזרה |
---|---|---|
listenerCount | שם אירוע | מחזירה את מספר המאזינים הרשומים לאירוע |
מאזינים | שם אירוע | מחזיר מערך של מאזינים |
removeListener | שם אירוע | מסיר מאזין אחד לפחות מאירוע שצוין. |
RemoveAllListeners | שם אירוע | מסיר את כל המאזינים עבור שם אירוע שצוין. אם לא תציין שם אירוע, קריאת שיטה זו תסיר את כל המאזינים עבור ה-EventEmitter. |
setMaxListeners | מספר | משנה את ברירת המחדל של מספר המאזינים המרבי לאירוע. השתמש באינסוף או באפס כדי לציין מספר בלתי מוגבל של מאזינים. כברירת מחדל, אתה יכול לעשות מנוי רק לעשרה מאזינים לאירוע. |
אתה יכול לקרוא לשיטות אלה רק ב-an פולט אירועים למשל.
לדוגמה:
myEmitter.removeListener("TestEvent");
בלוק הקוד שלמעלה מסיר מאזין יחיד עבור TestEvent מִקרֶה.
החשיבות של פולטי אירועים
Node.js מאמצת את פרדיגמת התכנות מונעת אירועים עם התמיכה שלה בפורצי אירועים ומאזינים. תכנות מונחה אירועים היא אחת הסיבות לכך שתוכניות Node.js מהירות ופשוטות יותר מאשר חלופות מסוימות. אתה יכול בקלות לסנכרן מספר אירועים, וכתוצאה מכך יעילות משופרת.