writeStream - 检测到可能的EventEmitter内存泄漏

时间:2014-11-30 07:02:49

标签: node.js memory-leaks node.js-stream

我正在创建一个写入流:

var file = fs.createWriteStream('path', {flags: 'a+', encoding: 'utf16le'});

使用async.queue,我正在排队这份工作:

file.write(data, 'utf8');

file.on('error', function(error) {
    console.error('ERROR with file stream', error);
});

获得此警告: (node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit.

有没有一种好方法可以解决这个问题,而不使用setMaxListeners(0)

节点版本:0.10.29

2 个答案:

答案 0 :(得分:2)

使用file.addListener(' error',fn)添加侦听器,使用file.removeListener()在作业完成时删除它。监听器的存在与注册功能无关,即使添加相同的函数堆栈,它也会被调用两次。

function listenerCallback() {
}
file.addListener('error', listenerCallback);
file.removeListener('error', listenerCallback);

删除的侦听器应该与添加的侦听器相同;添加function(){}然后删除function(){}不会取消第一个。

emitter.once()添加了一次性监听器,但由于这是用于错误而不是提取工作,所以这里不合适。

答案 1 :(得分:0)

获取所有数据或错误后。 删除听众

file.removeAllListeners()