ईवेंट उत्सर्जक NodeJS में ऑब्जेक्ट हैं जो एक संदेश भेजकर घटनाओं को ट्रिगर करते हैं जो संकेत देते हैं कि एक क्रिया हुई है।

Node.js एक अंतर्निहित ईवेंट मॉड्यूल प्रदान करता है। इसमें एक इवेंट एमिटर क्लास होता है जो आपको कॉलबैक फ़ंक्शंस के माध्यम से कस्टम ईवेंट बनाने और प्रबंधित करने देता है।

यहां आप सीखेंगे कि ईवेंट कैसे निकालें, ईवेंट डेटा को सुनें और प्रबंधित करें, और NodeJS में ईवेंट त्रुटियों को हैंडल करें।

उत्सर्जन घटनाएँ

ईवेंट मॉड्यूल इसका एक मुख्य भाग है Node.js सर्वर-साइड वातावरण. इस प्रकार, आपको इसे स्थापित करने की आवश्यकता नहीं है, लेकिन उपयोग करने से पहले इवेंटएमिटर क्लास, आपको ईवेंट मॉड्यूल से आयात करना होगा और इसे तुरंत चालू करना होगा।

जैसे इतना:

कॉन्स्ट इवेंट एमिटर = ज़रूरत होना("आयोजन");

// EventEmitter को इंस्टेंट करना
कॉन्स्ट मायएमिटर = नया इवेंटएमिटर ();

आप का उपयोग करके घटनाओं का उत्सर्जन कर सकते हैं इवेंटएमिटर'एस फेंकना तरीका। फेंकना विधि एक लेती है घटना नाम और मापदंडों के रूप में तर्कों की मनमानी संख्या।

एक बार जब आप कॉल करते हैं फेंकना विधि, यह पारित उत्सर्जित करता है घटना नाम

instagram viewer
. फिर यह प्रत्येक घटना के श्रोताओं को आपके द्वारा पंजीकृत किए गए क्रम में समकालिक रूप से कॉल करता है, प्रत्येक को आपूर्ति किए गए तर्कों को पारित करता है। अंत में, यह वापस आ जाता है सत्य अगर घटना में श्रोता थे और असत्य अगर उसके पास कोई श्रोता नहीं है।

उदाहरण के लिए:

myEmitter.emit ("टेस्टइवेंट", "फू", "छड़", 1, 2);

ऊपर दिए गए कोड ब्लॉक में आप पास हो गए हैं टेस्टइवेंट के रूप में घटना नाम, और "फू,” "छड़,” 1, और 2 तर्कों के रूप में। जब उपरोक्त कोड ब्लॉक चलता है तो यह सुनने वाले सभी श्रोताओं को सूचित करेगा टेस्टइवेंट आयोजन। यह उन श्रोताओं को दिए गए तर्कों के साथ बुलाएगा।

घटनाओं के लिए सुनना

आप का उपयोग करके उत्सर्जित घटनाओं को सुन सकते हैं इवेंटएमिटर'एस पर तरीका। पर विधि एक लेती है घटना नाम और पैरामीटर के रूप में कॉलबैक फ़ंक्शन। जब घटना के साथ घटना नाम में पारित किया गया पर विधि उत्सर्जित होती है, यह अपने कॉलबैक फ़ंक्शन को आमंत्रित करती है। यह विधि एक संदर्भ देता है इवेंटएमिटर, जिससे आप एक से अधिक कॉल की श्रृंखला बना सकते हैं।

उदाहरण के लिए:

// पहले श्रोता
myEmitter.on("टेस्टइवेंट", () => {
कंसोल लॉग ("टेस्टइवेंट उत्सर्जित!!!");
}); // टेस्टइवेंट उत्सर्जित !!!

// दूसरा श्रोता
myEmitter.on("टेस्टइवेंट", (...आर्ग्स) => {
आर्ग्स = आर्ग्स.जॉइन (", ");
सांत्वना देना।लकड़ी का लट्ठा(`घटना निम्नलिखित तर्कों के साथ उत्सर्जित: ${आर्ग्स}`);
}); // निम्नलिखित तर्कों के साथ उत्सर्जित घटना: फू, बार, 1, 2

myEmitter.emit ("टेस्टइवेंट", "फू", "छड़", 1, 2);

उपरोक्त कोड ब्लॉक में, जब टेस्टइवेंट घटना का उत्सर्जन होता है, घटना के लिए श्रोता अपने कॉलबैक कार्यों को लागू करेंगे। श्रोता आपके द्वारा पंजीकृत किए गए क्रम में प्रतिक्रिया देंगे, जिसका अर्थ है कि "पहले श्रोता का" कॉलबैक दूसरे से पहले चलेगा, और इसी तरह।

आप का उपयोग करके इस व्यवहार को बदल सकते हैं इवेंटएमिटर'एस प्रीपेन्ड लिस्टनर तरीका। यह विधि समान पैरामीटर लेती है पर तरीका। अंतर यह है कि यह विधि पहले घटना पर प्रतिक्रिया करती है, भले ही आपने इसे पंजीकृत किया हो।

उदाहरण के लिए:

myEmitter.on("टेस्टइवेंट", () => {
कंसोल लॉग ("टेस्टइवेंट उत्सर्जित!!!");
});

myEmitter.prependListener ("टेस्टइवेंट", () => {
कंसोल लॉग ("पहले क्रियान्वित करता है")
})

// कंसोल.लॉग (myEmitter.listeners ("टेस्टइवेंट"));
myEmitter.emit ("टेस्टइवेंट", "फू", "छड़", 1, 2);

जब उपरोक्त कोड ब्लॉक निष्पादित होता है, तो "पहले निष्पादित करें" पहले कंसोल पर लॉग किया जाएगा, उसके बाद "TestEvent Emitted!!!" चाहे जिस आदेश के कारण आपने उन्हें पंजीकृत किया हो प्रीपेन्ड लिस्टनर तरीका।

यदि आप कई श्रोताओं को पंजीकृत करते हैं प्रीपेन्ड लिस्टनर विधि, वे अंतिम से पहले क्रम में चलेंगे।

उत्सर्जक और श्रोताओं की व्यवस्था पर ध्यान दें। श्रोता हमेशा उत्सर्जक से पहले आते हैं। यह व्यवस्था इसलिए है क्योंकि एमिटर द्वारा उत्सर्जित करने से पहले श्रोताओं को पहले से ही घटना के बारे में सुनना चाहिए।

संदर्भ के लिए, नीचे दिए गए कोड ब्लॉक पर विचार करें:

myEmitter.emit ("टेस्टइवेंट", "फू", "छड़", 1, 2);

myEmitter.on("टेस्टइवेंट", () => {
कंसोल लॉग ("टेस्टइवेंट उत्सर्जित!!!");
});

यदि आप ऊपर दिए गए कोड ब्लॉक को चलाते हैं, तो कुछ नहीं होता है, क्योंकि जिस समय उत्सर्जक ने घटना को उत्सर्जित किया, उस समय कोई श्रोता घटना को नहीं सुन रहा था।

घटनाओं के लिए एक बार सुन रहा हूँ

आपकी आवश्यकताओं के आधार पर, आपको अपने एप्लिकेशन के जीवनचक्र में केवल एक बार कुछ घटनाओं को संभालने की आवश्यकता हो सकती है। आप इसका उपयोग करके इसे प्राप्त कर सकते हैं इवेंटएमिटर'एस एक बार तरीका।

यह विधि समान तर्क लेती है पर विधि और इसी तरह काम करता है। फर्क सिर्फ इतना है कि श्रोताओं ने पंजीकरण कराया एक बार विधि केवल एक बार घटना को सुनें।

उदाहरण के लिए:

myEmitter.एक बार ("एकल कार्यक्रम", () => {
कंसोल लॉग ("घटना को एक बार संभाला");
});

myEmitter.emit ("एकल कार्यक्रम"); // इवेंट एक बार हैंडल किया गया
myEmitter.emit ("एकल कार्यक्रम"); // अवहेलना करना
myEmitter.emit ("एकल कार्यक्रम"); // अवहेलना करना

कोड ब्लॉक को चलाने से केवल एक बार "इवेंट हैंडल किया गया" कंसोल पर एक बार लॉग होगा, भले ही एमिटर कितनी बार ईवेंट का उत्सर्जन करता हो।

के साथ पंजीकृत श्रोता एक बार विधि घटना पर प्रतिक्रिया करती है जिस क्रम में आप उन्हें पंजीकृत करते हैं। आप का उपयोग करके इस व्यवहार को बदल सकते हैं प्रीपेंड एक बार लिस्टनर तरीका है, जो इस तरह काम करता है प्रीपेन्ड लिस्टनर. फर्क सिर्फ इतना है कि श्रोताओं ने पंजीकरण कराया एक बार विधि केवल एक बार घटना को सुनें।

घटना उत्सर्जकों के साथ त्रुटियों को संभालना

आपको ध्यान रखना चाहिए जावास्क्रिप्ट त्रुटियों को उचित रूप से संभालें और घटना श्रोता कोई अपवाद नहीं हैं। उनसे अनहेल्ड त्रुटियां Node.js प्रक्रिया से बाहर निकलने और आपके एप्लिकेशन के क्रैश होने का कारण बनेंगी।

त्रुटि घटना को संभालने के लिए, घटना के श्रोताओं में से कम से कम एक के पास इसका होना चाहिए घटना नाम करने के लिए सेट गलती.

उदाहरण के लिए:

myEmitter.on("गलती", (त्रुटि) => {
सांत्वना देना।गलती(`त्रुटि: ${त्रुटि}`);
});

एक श्रोता के पास एक संभावित त्रुटि को संभालने के लिए, जैसा कि ऊपर दिए गए कोड ब्लॉक में है, त्रुटि होने पर एप्लिकेशन को क्रैश होने से रोक देगा।

उदाहरण के लिए:

myEmitter.emit ("गलती", नई त्रुटि ("यह एक त्रुटि है"));

ऊपर दिए गए कोड ब्लॉक को चलाने से कंसोल में "यह एक त्रुटि है" लॉग हो जाएगा क्योंकि एक श्रोता त्रुटि घटनाओं को संभाल रहा है।

इवेंट श्रोताओं का प्रबंधन

इवेंटएमिटर कक्षा में कई विधियाँ हैं जो आपको ईवेंट श्रोताओं में हेरफेर करने और प्रबंधित करने की अनुमति देती हैं। आप किसी ईवेंट के श्रोताओं को प्राप्त कर सकते हैं, उन्हें हटा सकते हैं और किसी ईवेंट के लिए श्रोताओं की अधिकतम संख्या निर्धारित कर सकते हैं।

यहाँ एक तालिका युक्त है इवेंटएमिटर वे तरीके जिनसे आप ईवेंट श्रोताओं में हेरफेर कर सकते हैं:

तरीका बहस प्रतिलाभ की मात्रा
श्रोतागणना घटना नाम किसी ईवेंट की सदस्यता लेने वाले श्रोताओं की संख्या लौटाता है
श्रोताओं घटना नाम श्रोताओं की एक सरणी देता है
हटाएं लिस्टनर घटना नाम निर्दिष्ट ईवेंटनाम से कम से कम एक श्रोता को निकालता है।
removeAllListeners घटना नाम निर्दिष्ट ईवेंटनाम के लिए सभी श्रोताओं को निकालता है। यदि आप किसी ईवेंट का नाम निर्दिष्ट नहीं करते हैं, तो यह विधि कॉल EventEmitter के सभी श्रोताओं को हटा देगी।
setMaxListeners संख्या प्रति घटना श्रोताओं की डिफ़ॉल्ट अधिकतम संख्या को बदलता है। असीमित संख्या में श्रोताओं को इंगित करने के लिए अनंत या शून्य का उपयोग करें। डिफ़ॉल्ट रूप से, आप एक ईवेंट में केवल दस श्रोताओं की सदस्यता ले सकते हैं।

आप इन विधियों को केवल a पर कॉल कर सकते हैं इवेंटएमिटर उदाहरण।

उदाहरण के लिए:

myEmitter.removeListener ("टेस्टइवेंट");

उपरोक्त कोड ब्लॉक के लिए एक श्रोता को हटा देता है टेस्टइवेंट आयोजन।

घटना उत्सर्जकों का महत्व

Node.js घटना उत्सर्जक और श्रोताओं के समर्थन के साथ घटना-संचालित प्रोग्रामिंग प्रतिमान को अपनाता है। इवेंट-संचालित प्रोग्रामिंग एक कारण है कि Node.js प्रोग्राम कुछ विकल्पों की तुलना में तेज़ और अधिक सीधे हैं। आप आसानी से कई घटनाओं को सिंक्रनाइज़ कर सकते हैं, जिसके परिणामस्वरूप दक्षता में सुधार होगा।