Skip to content

Commit caccc61

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 616ecf0 commit caccc61

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

lib/events.js

Lines changed: 1 addition & 1 deletion
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

Lines changed: 12 additions & 0 deletions
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)