سؤال

لنأخذ stdin.on كمثال. عمليات الاسترجاعات إلى stdin.on مكدس ، لذلك إذا كتبت (في Coffescript)

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

ثم في كل مرة أصابني بالعودة إلى المطالبة ، أحصل عليها

One
Two

سؤالي هو ، هل هناك أي طريقة لإزالة/استبدال رد الاتصال بمجرد ربطه؟ أم أن النهج الوحيد لربط رد الاتصال بالوكالة وإدارة الحالة بنفسي؟

هل كانت مفيدة؟

المحلول

يمكنك استخدام removeListener(eventType, callback) لإزالة حدث ، والذي يجب أن يعمل مع جميع أنواع البوابات.

مثال من مستندات API:

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

لذلك ، يجب أن يكون لديك متغير يحمل إشارة إلى رد الاتصال ، لأنه من الواضح أنه من المستحيل معرفة رد الاتصال الذي تريد إزالته.

تعديل
يجب أن يكون شخصًا مثل هذا في CS:

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

نصائح أخرى

أو يمكنك استخدام:

stdin.once بدلاً من stdin.on

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top