You are only clearing your array. There may be a bug in your code, can't tell from the code you posted. To be sure, you should iterate over your my_arrays objects and call
removeListener (‘event_name’, eventListener)
for each, then clear my_array using my_array = []. In that way, the Garbage Collector will take care of those, as there will be no reference. First argument is event name, second an eventListener you want to delete.
Also, in your case, you should use
removeAllListeners(‘event_name’)
as it doesn't need eventListener function name and you don't need those objects anymore later.
SSCCE:
//creating an EventEmitter object just to illustrate how it works
var events = require('events');
function ExampleObject() {
events.EventEmitter.call(this);
this.talk = function()
{
this.emit('event_name');
}
}
ExampleObject.prototype.__proto__ = events.EventEmitter.prototype;
var exampleObject = new ExampleObject();
exampleObject.on('event_name', function() {
console.log('Here I go!');
});
exampleObject.talk();
//---------
my_array = [];
var listener = function listener()
{
console.log('event_name_listener');
}
for(i = 0; i < 5; i++)
{
my_array[i] = new events.EventEmitter();
my_array[i].on('event_name', listener);
}
for(i = 0; i < my_array.length; i++)
{
my_array[i].emit('event_name');
console.log(i);
}
for(i = 0; i < my_array.length; i++)
{
my_array[i].removeAllListeners('event_name'); //could use removeListener('event_name', listener)
}
my_array = [];
console.log("Array length:"+my_array.length);
//------------- and here our ExampleObject
exampleObject.talk();
console.log("Listeners: "+require('util').inspect(exampleObject.listeners('event_name')));
console.log(exampleObject);//more info
exampleObject.removeAllListeners('event_name');
exampleObject.talk();//nothing happens
console.log("Listeners: "+require('util').inspect(exampleObject.listeners('event_name')));
delete exampleObject;
console.log(exampleObject);
Output:
Here I go!
event_name_listener
0
event_name_listener
1
event_name_listener
2
event_name_listener
3
event_name_listener
4
Array length:0
Here I go!
Listeners: [ [Function] ]
ExampleObject {
domain: null,
_events: { event_name: [Function] },
_eventsCount: 1,
_maxListeners: undefined,
talk: [Function] }
Listeners: []
ExampleObject {
domain: null,
_events: {},
_eventsCount: 0,
_maxListeners: undefined,
talk: [Function] }
At the end, all eventListeners are deleted.