Skip to content

Commit 3465da2

Browse files
committed
events: unwrap #once listeners in #listeners
1 parent 3307c30 commit 3465da2

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

lib/events.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -396,9 +396,9 @@ EventEmitter.prototype.listeners = function listeners(type) {
396396
if (!evlistener)
397397
ret = [];
398398
else if (typeof evlistener === 'function')
399-
ret = [evlistener];
399+
ret = [unwrapListener(evlistener)];
400400
else
401-
ret = arrayClone(evlistener, evlistener.length);
401+
ret = arrayMap(evlistener, unwrapListener);
402402
}
403403

404404
return ret;
@@ -452,6 +452,14 @@ function arrayClone(arr, i) {
452452
return copy;
453453
}
454454

455+
function arrayMap(arr, fn) {
456+
var ret = new Array(arr.length);
457+
for (var i = 0; i < ret.length; ++i) {
458+
ret[i] = fn(arr[i]);
459+
}
460+
return ret;
461+
}
462+
455463
function unwrapListener(listener) {
456464
return listener.listener ? listener.listener : listener;
457465
}

test/parallel/test-event-emitter-listeners.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,12 @@ var e3ListenersCopy = e3.listeners('foo');
3030
e3.on('foo', listener2);
3131
assert.deepEqual(e3.listeners('foo'), [listener, listener2]);
3232
assert.deepEqual(e3ListenersCopy, [listener]);
33+
34+
var e4 = new events.EventEmitter();
35+
e4.once('foo', listener);
36+
assert.deepEqual(e4.listeners('foo'), [listener]);
37+
38+
var e5 = new events.EventEmitter();
39+
e5.on('foo', listener);
40+
e5.once('foo', listener2);
41+
assert.deepEqual(e5.listeners('foo'), [listener, listener2]);

0 commit comments

Comments
 (0)