mirror of https://github.com/nodejs/node.git
FIX: EventEmitter#removeListener logic
In the case of one defined listener, the function should only remove it if it is the same as the passed listener.pull/22966/head
parent
4274e6b7d0
commit
fea6f829bf
|
@ -90,7 +90,7 @@ process.EventEmitter.prototype.removeListener = function (type, listener) {
|
|||
var i = list.indexOf(listener);
|
||||
if (i < 0) return this;
|
||||
list.splice(i, 1);
|
||||
} else {
|
||||
} else if (this._events[type] === listener) {
|
||||
this._events[type] = null;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
require("../common");
|
||||
var events = require('events');
|
||||
|
||||
|
||||
count = 0;
|
||||
|
||||
function listener1 () {
|
||||
puts('listener1');
|
||||
count++;
|
||||
}
|
||||
|
||||
function listener2 () {
|
||||
puts('listener2');
|
||||
count++;
|
||||
}
|
||||
|
||||
function listener3 () {
|
||||
puts('listener3');
|
||||
count++;
|
||||
}
|
||||
|
||||
e1 = new events.EventEmitter();
|
||||
e1.addListener("hello", listener1);
|
||||
e1.removeListener("hello", listener1);
|
||||
assert.deepEqual([], e1.listeners('hello'));
|
||||
|
||||
e2 = new events.EventEmitter();
|
||||
e2.addListener("hello", listener1);
|
||||
e2.removeListener("hello", listener2);
|
||||
assert.deepEqual([listener1], e2.listeners('hello'));
|
||||
|
||||
e3 = new events.EventEmitter();
|
||||
e3.addListener("hello", listener1);
|
||||
e3.addListener("hello", listener2);
|
||||
e3.removeListener("hello", listener1);
|
||||
assert.deepEqual([listener2], e3.listeners('hello'));
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue