首页 > 解决方案 > 如何在 NodeJS 中删除事件监听器?

问题描述

我无法弄清楚这应该如何实现。每次我尝试时,它要么抱怨 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;
    }*/

},

原始数据以未清理地址的形式读取,我的代码将它们转换为字符串,其中包含未清理地址、邮政编码、找到的组件以及附加到它的一系列组件,然后将其写入目标文件

标签: javascriptnode.jsstream

解决方案


推荐阅读