我正在创建一个写入流:
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
答案 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()