2014-06-25 4 views
7

क्या हमारे पास एक उत्सर्जक के कई श्रोताओं हैं, प्रत्येक तर्क की विभिन्न संख्याओं पर काम कर रहे हैं?घटना विभिन्नमीटरों के साथ एमिटर श्रोताओं और उत्सर्जक

उदा। घटना emitter इस तरह रहने दो:

evetE.emit('pre', global, file, self); 
corresponding event listeners: 
//Listener 1 

m.eventE.on('pre', function() { 
//TODO 
}) 

//Listener 2 
eventE.on('pre', function(context, file, m){ 
    console.log(context.ans); 
}); 

//Listener 3 
eventE.on('pre', function(context){ 
    console.log(context.ans); 
}); 

//Listener 4 
this.eventE.on('pre',function (context) {}) 

यदि उपरोक्त सत्य है, तभी जो पैरामीटर जो श्रोता के लिए चला जाता है?

उत्तर

4

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

var EventEmitter = require('events').EventEmitter; 

var ee = new EventEmitter(); 

ee.on('myEvent', function() { 
    console.log('no arguments'); 
    console.log(arguments); // Outputs: { '0': 'arg 1', '1': 'arg 2' } 
}); 

ee.on('myEvent', function(arg1, arg2) { 
    console.log('with arguments'); 
    console.log(arg1); 
    console.log(arg2); 
}); 

ee.emit('myEvent', 'arg 1', 'arg 2'); 
+0

त्वरित प्रतिक्रिया – nirvanastack

14

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

var EE = require('events').EventEmitter; 
var ee = new EE(); 

ee.on('test', function (first, second, third) { 
    console.log(first, second, third); //Will output full phrase 
}); 

ee.on('test', function (first) { 
    console.log(first); //Will output just first word 
}); 

ee.on('test', function() { 
    console.log.apply(console, arguments); //Will output full phrase again 
}); 

ee.emit('test', 'Hello', 'my', 'world!'); 

वास्तव में आप देख सकते हैं कि सभी प्रदान किए गए तर्कों हमेशा हर कार्य करने के लिए पारित कर दिया। लेकिन यदि आप फ़ंक्शन घोषणा में तर्क नाम परिभाषित नहीं करते हैं तो आप सीधे इस तर्क तक पहुंच नहीं पाएंगे। लेकिन आप सभी उपलब्ध तर्कों तक पहुंचने के लिए प्रत्येक फ़ंक्शन के अंदर जादू "तर्क" ऑब्जेक्ट का उपयोग कर सकते हैं। संभोग, कार्य को ईई को पारित आदेश में प्रदान किया गया तर्क।

+0

के लिए धन्यवाद हेस इसे मिला। तो सभी तर्क पारित किए जाते हैं इससे कोई फर्क नहीं पड़ता कि समारोह घोषणा में कितने तर्क हैं। यदि स्पष्ट रूप से परिभाषित नहीं किया गया है तो वे जादू तर्क वस्तु में प्राप्त होंगे। धन्यवाद लोग – nirvanastack

+0

आपका स्वागत है! – mynameisdaniil

संबंधित मुद्दे