警告:可能检测到事件发射器内存泄漏.添加了 11 个 AppUp > 听众.使用 emitter.setMaxListe
warning: possible EventEmitter memory leak detected. 11 AppUp > listeners added. Use emitter.setMaxListeners() to increase limit
我正在使用以下事件发射器(我需要此功能)。我的问题是如何避免错误。
似乎我在另一个事件中使用事件。
警告:可能检测到事件发射器内存泄漏。 11 应用起来 听众补充道。使用 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
};
有没有办法避免此错误?
每次调用 runApp 函数时,它都会为 AppUp 事件设置一个侦听器。因此,如果多次调用 runApp 函数,则调用 run 函数的次数将与之前调用 runApp 的次数相同,加上发出 AppUp 事件时的实际调用。
可能的解决方案是仅侦听一次 AppUP 事件,并进行以下修改:
appStatus.eventEmitter.once('AppUp', function () {
run(req, res);
});