Skip to content

Commit 67b13d1

Browse files
yuzheng14juanarbol
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 <[email protected]> Reviewed-By: Paolo Insogna <[email protected]> Reviewed-By: Minwoo Jung <[email protected]>
1 parent caccb05 commit 67b13d1

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
@@ -847,7 +847,7 @@ function listenerCount(type, listener) {
847847

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

853853
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)