2010-11-29 11 views
19

में अनबाइंडिंग ईवेंट उदाहरण के रूप में stdin.on लेते हैं। stdin.on ढेर के लिए कॉलबैक, इसलिए यदि मैं (CoffeeScript में) लिखनेNode.js

stdin = process.openStdin() 
stdin.setEncoding 'utf8' 
stdin.on 'data', (input) -> console.log 'One' 
stdin.on 'data', (input) -> console.log 'Two' 

तो हर बार जब मैं प्रॉम्प्ट पर वापसी मारा, मैं

One 
Two 

मेरा प्रश्न है मिलता है, वहाँ दूर करने के लिए किसी भी तरह से है/एक बार बाध्य एक कॉलबैक को प्रतिस्थापित करें? या प्रॉक्सी कॉलबैक बांधने और खुद को राज्य का प्रबंधन करने का एकमात्र तरीका है?

+0

कैसे दूर करने के लिए इनलाइन श्रोता फ़ंक्शन? 'server.on ('कनेक्ट', फ़ंक्शन (पीकेटी) {...}) की तरह;' – kBisla

उत्तर

29

आप किसी ईवेंट को हटाने के लिए removeListener(eventType, callback) का उपयोग कर सकते हैं, जो सभी प्रकार के उत्सर्जकों के साथ काम करना चाहिए। एपीआई डॉक्स से

उदाहरण:

var callback = function(stream) { 
    console.log('someone connected!'); 
}; 
server.on('connection', callback); 
// ... 
server.removeListener('connection', callback); 

तो तुम, एक ऐसा वैरिएबल कॉलबैक के लिए एक संदर्भ रखती है क्योंकि जाहिर है, यह बताने के लिए जो कालबैक आपने निकाले जाने के लिए चाहते हैं अन्यथा असंभव है की जरूरत है।

संपादित
सीएस में इस तरह किसी को होना चाहिए:

stdin = process.openStdin() 
stdin.setEncoding 'utf8' 

logger = (input) -> console.log 'One' 
stdin.on 'data', logger 
stdin.removeListener 'data', logger 

stdin.on 'data', (input) -> console.log 'Two' 

देखें: http://nodejs.org/docs/latest/api/events.html#emitter.removeListener

+0

धन्यवाद, यह सही मायने रखता है! –

+1

यह अच्छी तरह से काम करता है, लेकिन इनलाइन श्रोता कार्यों को हटाने का कोई तरीका है? 'server.on ('कनेक्ट', फ़ंक्शन (pkt) {...}) की तरह;' ' – kBisla

15

या आप उपयोग कर सकते हैं:

stdin.once बजाय stdin.on