2014-11-30 2 views
0

Я создаю WriteStream:WriteStream - возможная утечка памяти EventEmitter обнаружена

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); 
}); 

Getting это предупреждение: (node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit.

Есть ли хороший способ решить эту проблему, не используя setMaxListeners(0)?

версия Node: 0.10.29

ответ

2

Использование file.addListener ('ошибка', п), чтобы добавить слушателя, и file.removeListener(), чтобы удалить его, когда работа сделана. Слушатели существуют независимо от функции регистрации и добавляют даже идентичные стеки функций, они будут вызваны дважды.

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

Удаленный слушатель должен быть === идентичным тому, который был добавлен; добавив функцию() {}, то remove function() {} не отменяет первый.

emitter.once() добавляет одноразовый прослушиватель, но так как это используется для ошибок и не извлекает работу, здесь это не подходит.

+0

Теперь это имеет смысл. Спасибо. Это решило мою проблему. – Udi

Смежные вопросы