【问题标题】:writeStream - possible EventEmitter memory leak detectedwriteStream - 检测到可能的 EventEmitter 内存泄漏
【发布时间】:2014-11-30 07:02:49
【问题描述】:

我正在创建一个写入流:

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

【问题讨论】:

    标签: node.js memory-leaks node.js-stream


    【解决方案1】:

    使用 file.addListener('error', fn) 添加监听器,并在工作完成后使用 file.removeListener() 删除它。监听器独立于注册函数而存在,即使添加相同的函数堆栈,它也会被调用两次。

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

    删除的侦听器应该 === 与添加的侦听器相同;添加 function(){} 然后删除 function(){} 不会取消第一个。

    emitter.once() 添加了一个一次性监听器,但由于它用于错误而不是获取工作,因此这里不合适。

    【讨论】:

      【解决方案2】:

      获取所有数据或错误后。 移除监听器

      file.removeAllListeners()

      【讨论】:

        猜你喜欢
        • 2018-08-13
        • 1970-01-01
        • 2022-10-14
        • 1970-01-01
        • 2020-02-27
        • 2021-09-05
        • 2019-11-07
        相关资源
        最近更新 更多