Node.js
इवेंट एमिटर
खोज…
टिप्पणियों
जब कोई घटना "आग" (जिसका अर्थ "किसी घटना को प्रकाशित करना" या "एक घटना का उत्सर्जन करना") के समान है, प्रत्येक श्रोता को समकालिक ( स्रोत ) के साथ, किसी भी साथ जाने वाले डेटा के साथ कहा जाएगा जो emit()
करने के लिए पारित किया गया था emit()
, नहीं आप में कितने तर्क से गुजरते हैं:
myDog.on('bark', (howLoud, howLong, howIntense) => { // handle the event }) myDog.emit('bark', 'loudly', '5 seconds long', 'fiercely')
श्रोताओं को उस क्रम में बुलाया जाएगा जो वे पंजीकृत थे:
myDog.on('urinate', () => console.log('My first thought was "Oh-no"')) myDog.on('urinate', () => console.log('My second thought was "Not my lawn :)"')) myDog.emit('urinate') // The console.logs will happen in the right order because they were registered in that order.
लेकिन अगर आपको पहले सुनने के लिए श्रोता की आवश्यकता है, तो इससे पहले कि अन्य श्रोताओं को जोड़ा गया है, आप prependListener()
उपयोग कर सकते हैं:
myDog.prependListener('urinate', () => console.log('This happens before my first and second thoughts, even though it was registered after them'))
आप एक घटना को सुनने के लिए की जरूरत है, लेकिन आप केवल इसके बारे में एक बार सुनना चाहते हैं, तो आप उपयोग कर सकते हैं once
के बजाय on
, या prependOnceListener
के बजाय prependListener
। घटना के बाद निकाल दिया जाता है और श्रोता को बुलाया जाता है, श्रोता स्वचालित रूप से हटा दिया जाएगा, और अगली बार घटना को निकाल दिए जाने पर फिर से कॉल नहीं किया जाएगा।
अंत में, यदि आप सभी श्रोताओं को हटाना चाहते हैं और शुरू करना चाहते हैं, तो बस ऐसा करने के लिए स्वतंत्र महसूस करें:
myDog.removeAllListeners()
ईवेंट एनालिटिक्स के माध्यम से HTTP एनालिटिक्स
HTTP सर्वर कोड में (जैसे server.js
):
const EventEmitter = require('events')
const serverEvents = new EventEmitter()
// Set up an HTTP server
const http = require('http')
const httpServer = http.createServer((request, response) => {
// Handler the request...
// Then emit an event about what happened
serverEvents.emit('request', request.method, request.url)
});
// Expose the event emitter
module.exports = serverEvents
पर्यवेक्षक कोड में (जैसे supervisor.js
):
const server = require('./server.js')
// Since the server exported an event emitter, we can listen to it for changes:
server.on('request', (method, url) => {
console.log(`Got a request: ${method} ${url}`)
})
जब भी सर्वर को अनुरोध मिलता है, वह request
नामक एक घटना का उत्सर्जन करेगा, जिसे पर्यवेक्षक सुन रहा है, और फिर पर्यवेक्षक घटना पर प्रतिक्रिया कर सकता है।
मूल बातें
इवेंट एमिटर को नोड में बनाया गया है, और पब-उप के लिए हैं, एक पैटर्न जहां एक प्रकाशक घटनाओं का उत्सर्जन करेगा, जिसे ग्राहक सुन सकते हैं और प्रतिक्रिया दे सकते हैं। नोड शब्दजाल में, प्रकाशकों को इवेंट इमिटर कहा जाता है, और वे घटनाओं का उत्सर्जन करते हैं, जबकि ग्राहकों को श्रोता कहा जाता है , और वे घटनाओं पर प्रतिक्रिया करते हैं।
// Require events to start using them const EventEmitter = require('events').EventEmitter; // Dogs have events to publish, or emit class Dog extends EventEmitter {}; class Food {}; let myDog = new Dog(); // When myDog is chewing, run the following function myDog.on('chew', (item) => { if (item instanceof Food) { console.log('Good dog'); } else { console.log(`Time to buy another ${item}`); } }); myDog.emit('chew', 'shoe'); // Will result in console.log('Time to buy another shoe') const bacon = new Food(); myDog.emit('chew', bacon); // Will result in console.log('Good dog')
उपरोक्त उदाहरण में, कुत्ता प्रकाशक / EventEmitter है, जबकि फ़ंक्शन जो आइटम की जांच करता है वह ग्राहक / श्रोता था। आप अधिक श्रोता भी बना सकते हैं:
myDog.on('bark', () => { console.log('WHO\'S AT THE DOOR?'); // Panic });
किसी एकल ईवेंट के लिए कई श्रोता भी हो सकते हैं, और श्रोताओं को हटा भी सकते हैं:
myDog.on('chew', takeADeepBreathe); myDog.on('chew', calmDown); // Undo the previous line with the next one: myDog.removeListener('chew', calmDown);
यदि आप किसी घटना को केवल एक बार सुनना चाहते हैं, तो आप इसका उपयोग कर सकते हैं:
myDog.once('chew', pet);
जो दौड़ की स्थिति के बिना श्रोता को स्वचालित रूप से हटा देगा।
उन घटनाओं के नाम प्राप्त करें जिनकी सदस्यता ली गई है
फ़ंक्शन EventEmitter.eventNames () वर्तमान में सदस्यता ली गई घटनाओं के नामों से युक्त एक सरणी लौटाएगा।
const EventEmitter = require("events");
class MyEmitter extends EventEmitter{}
var emitter = new MyEmitter();
emitter
.on("message", function(){ //listen for message event
console.log("a message was emitted!");
})
.on("message", function(){ //listen for message event
console.log("this is not the right message");
})
.on("data", function(){ //listen for data event
console.log("a data just occured!!");
});
console.log(emitter.eventNames()); //=> ["message","data"]
emitter.removeAllListeners("data");//=> removeAllListeners to data event
console.log(emitter.eventNames()); //=> ["message"]
किसी विशिष्ट घटना को सुनने के लिए पंजीकृत श्रोताओं की संख्या प्राप्त करें
फ़ंक्शन Emitter.listenerCount (eventName) उन श्रोताओं की संख्या लौटाएगा जो वर्तमान में तर्क के रूप में दी गई घटना के लिए सुन रहे हैं
const EventEmitter = require("events");
class MyEmitter extends EventEmitter{}
var emitter = new MyEmitter();
emitter
.on("data", ()=>{ // add listener for data event
console.log("data event emitter");
});
console.log(emitter.listenerCount("data")) // => 1
console.log(emitter.listenerCount("message")) // => 0
emitter.on("message", function mListener(){ //add listener for message event
console.log("message event emitted");
});
console.log(emitter.listenerCount("data")) // => 1
console.log(emitter.listenerCount("message")) // => 1
emitter.once("data", (stuff)=>{ //add another listener for data event
console.log(`Tell me my ${stuff}`);
})
console.log(emitter.listenerCount("data")) // => 2
console.log(emitter.listenerCount("message"))// => 1