2010-11-29 16 views
19

Örnek olarak stdin.on'u ele alalım. stdin.on yığınına geri aramalar, bu yüzden (CoffeeScript cinsinden) yazarsanızNode.js içinde açma olayları

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

sonra isteminde dönüşü vurmak her zaman, Benim sorum

One 
Two 

olsun, kaldırmak için herhangi bir yol yoktur/Bir kez bir geri arama yerine? Ya da vekaleten geri çağırma ve devleti kendim yönetmek için tek yaklaşım mı?

+0

stdin.on arasında nasıl kaldırmak için satır içi dinleyici fonksiyonları? Like server.on ('connect', işlev (pkt) {...}); ' – kBisla

cevap

29

Her türlü yayıcıyla çalışması gereken bir olayı kaldırmak için removeListener(eventType, callback) numaralı telefonu kullanabilirsiniz. API dokümanlardan

Örnek:

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

Yani belli ki, bu kaldırdık istediğiniz geri çağırma hangi söylemek aksi imkansız çünkü geri arama bir başvuru tutan bir değişken olması gerekir.

DÜZENLEME
CS böyle birisi olmalı:

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' 

Bkz: http://nodejs.org/docs/latest/api/events.html#emitter.removeListener

+0

Teşekkür ederim, bu mükemmel bir anlam ifade ediyor! –

+1

Bu iyi çalışıyor, ancak satır içi dinleyici işlevlerini kaldırmanın bir yolu var mı? Gibi server.on ('connect', function (pkt) {...}); ' – kBisla

15

Yoksa kullanabilirsiniz:

stdin.once yerine

İlgili konular