Я не могу понять, как это должно быть реализовано. Каждый раз, когда я пытаюсь, он либо жалуется, что removeEventListener не является функцией, либо какая-то другая случайная ошибка. В настоящее время это используется в контексте того, что блоки данных записываются в файл, и мне нужно время от времени использовать слив, а затем удалить прослушиватель стока. Я получаю сообщение об ошибке
(node:8996) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 drain listeners added to [WriteStream]. Use emitter.setMaxListeners() to increase limit
, а затем, в конце концов, исчерпает память кучи для JavaScript. Я пытаюсь не увеличивать разрешенную память, но если это единственное, что я могу сделать, дайте мне знать
Мой текущий код выглядит так, потому что я понятия не имею, что делаю
fileWrite: async function AddressesToFile(chunk, fileS, done) {
console.log("Writing chunk in");
var writeCon = true;
//Writes the chunk into the output filestream
for (var i=0;i<chunk.length;i++) {
//Split the address line along the custom separators used
for (var ii=0;ii<chunk[i].split("(|S|)").length;ii++) {
if (ii == 0) {
//Add quotes around the first element (the original address string)
writeCon = fileS.write('"' + chunk[i].split("(|S|)")[ii] + '",');
} else if (ii == chunk[i].split("(|S|)").length-1) {
//Add a newline after each element
writeCon = fileS.write(chunk[i].split("(|S|)")[ii] + '\n');
} else {
//Add a comma after last element
writeCon = fileS.write(chunk[i].split("(|S|)")[ii] + ',');
}
}
}
if (!writeCon) {
fileS.once('drain', (drain) => fileS.removeEventListeners('drain', (drain) => console.log('Drained')));
}
//If we have sent the last chunk through, close the file stream
/*if (done) {
fileS.end();
extractDone = true;
}*/
},
Исходные данные считываются в форме неочищенных адресов, мой код превращает их в строки с неочищенным адресом, почтовым кодом, найденными компонентами и множеством найденных компонентов, прикрепленных к нему, которые затем записываются в файл назначения