2016-02-29 5 views
-1

Я использую следующий эмитент событий (и мне нужна эта функциональность). Мой вопрос: как избежать ошибки.предупреждение: возможно обнаружение утечки памяти EventEmitter. Добавлено 11 приложений AppUp>. Используйте emitter.setMaxListeners(), чтобы увеличить предел

Кажется, что я использую событие внутри другого события.

предупреждение: возможно обнаружение утечки памяти EventEmitter. Добавлено 11 AppUp слушателей. Используйте emitter.setMaxListeners(), чтобы увеличить лимит.

Я использую узел 0.12.7

Это весь код модуля:

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

var run = function (req, res) { 
     host = req.headers.host.split(':')[0]; 
     proxy.web(req, res, { 
      target: 'http://' + host + ':' + port 
     }); 
}; 


var runApp = function (req, res) { 
    appStatus.eventEmitter.on('AppUp', function() { 
     run(req, res); 
    }); 
    if (model.get()) { 
     run(req, res); 
    } 

} 


module.exports = { 
    runApp: runApp 
}; 

Есть ли способ избежать этой ошибки?

ответ

1

Каждый раз, когда вы вызываете функцию runApp, он устанавливает прослушиватель для события AppUp. Поэтому, если вы вызовете функцию runApp несколько раз, функция запуска будет называться столько же раз, сколько вы ранее вызывали runApp, а также фактический вызов, когда происходит событие AppUp.

Возможное решение слушать Appup событие только один раз со следующими изменениями:

appStatus.eventEmitter.once('AppUp', function() { 
    run(req, res); 
});