@x2roma
Инженер. Учусь веб программированию.

Проблема с EventEmitter в модуле PromiseFTP, как выловить утечку?

работал ли кто-нибудь с PromiseFTP? получаю список файлов по маске нужных мне, then делаю get в цикле для каждого файла. Выводит Possible EventEmitter memory leak detected. 11 error listeners added. Хотя eventNames и listenerCount выводят [ 'end', 'finish', '_socketEnd', 'error', 'close', 'data' ] 3 1 1 2 2 1 в каждой итерации. цифры соответствуют количеству слушателей для каждого события. и почему их по 3 если должно быть по 1? ковыряюсь 2 день не пойму.
код:
var ftp = new PromiseFtp();
ftp.connect(ftp1).then(function (serverMessage) {
  console.log('Server message: '+serverMessage);
  return ftp.list('2019/07/18/*fr.jpg');
}).then(function (list) {
       list.forEach(function(element,nubmer) {

        returnImage(element);

  });  
}).then(function (resultofwork) {
  return ftp.end();
});;


function returnImage(element){
  return ftp.get('2019/07/18/'+element.name).then(function (stream) {
    return new Promise(function (resolve, reject) {

      stream.once('close', resolve);
      stream.once('error', reject);
      stream.pipe(fs.createWriteStream('files/'+element.name));
      console.log(stream.eventNames(), stream.listenerCount('end'),stream.listenerCount('finish'),stream.listenerCount('_socketEnd'),stream.listenerCount('error'),stream.listenerCount('close'),stream.listenerCount('data'),);
    });
})};


свойство events объекта stream:
_events:
{ end: [ [Function], [Function], [Function] ],
finish: [Function: onSocketFinish],
_socketEnd: [Function: onSocketEnd],
error: [ [Function], [Function] ],
close: [ [Function], [Function] ],
data: [Function: ondata] },
  • Вопрос задан
  • 69 просмотров
Пригласить эксперта
Ответы на вопрос 1
Robur
@Robur
Знаю больше чем это необходимо
https://github.com/nolanlawson/throw-max-listeners...
это поможет сделать из предупреждения ошибку и отловить где это происходит.
Можно просто взять идею и отдебажить без этой либы, достаточно отловить момент когда слушателей становится больше 10 и посмотреть на callstack.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы