Skip to content

Commit 3b8ec34

Browse files
yuzheng14ruyadorno
authored andcommitted
events: fix bug listenerCount don't compare wrapped listener
When add listener by once, it will be wrapped into another function. And when pass listener and there is just one event listener added by once, it will return 0 even if passed listener equal wrapped event listener. Refs: #46523 PR-URL: #48592 Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Paolo Insogna <paolo@cowtech.it> Reviewed-By: Minwoo Jung <nodecorelab@gmail.com>
1 parent 1aa798d commit 3b8ec34

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

lib/events.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -850,7 +850,7 @@ function listenerCount(type, listener) {
850850

851851
if (typeof evlistener === 'function') {
852852
if (listener != null) {
853-
return listener === evlistener ? 1 : 0;
853+
return listener === evlistener || listener === evlistener.listener ? 1 : 0;
854854
}
855855

856856
return 1;

test/parallel/test-events-listener-count-with-listener.js

+12
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,18 @@ assert.strictEqual(EE.listenerCount('event'), 0);
1212
assert.strictEqual(EE.listenerCount('event', handler), 0);
1313
assert.strictEqual(EE.listenerCount('event', anotherHandler), 0);
1414

15+
EE.once('event', handler);
16+
17+
assert.strictEqual(EE.listenerCount('event'), 1);
18+
assert.strictEqual(EE.listenerCount('event', handler), 1);
19+
assert.strictEqual(EE.listenerCount('event', anotherHandler), 0);
20+
21+
EE.removeAllListeners('event');
22+
23+
assert.strictEqual(EE.listenerCount('event'), 0);
24+
assert.strictEqual(EE.listenerCount('event', handler), 0);
25+
assert.strictEqual(EE.listenerCount('event', anotherHandler), 0);
26+
1527
EE.on('event', handler);
1628

1729
assert.strictEqual(EE.listenerCount('event'), 1);

0 commit comments

Comments
 (0)