0

我正在创建一个写流:

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

4

2 回答 2

2

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

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

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

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

于 2014-11-30T07:37:17.260 回答
0

获取所有数据或错误后。删除听众

file.removeAllListeners()

于 2020-02-09T19:30:28.140 回答