diff --git a/lib/internal/event_target.js b/lib/internal/event_target.js index 35d9e7275af2d0..983e2671b7bb6e 100644 --- a/lib/internal/event_target.js +++ b/lib/internal/event_target.js @@ -240,7 +240,7 @@ class EventTarget { } let handler = root.next; - let previous; + let previous = root; // We have to walk the linked list to see if we have a match while (handler !== undefined && !handler.same(listener, capture)) { diff --git a/test/parallel/test-eventtarget-once-twice.js b/test/parallel/test-eventtarget-once-twice.js new file mode 100644 index 00000000000000..6a38b80e2db75a --- /dev/null +++ b/test/parallel/test-eventtarget-once-twice.js @@ -0,0 +1,19 @@ +// Flags: --expose-internals --no-warnings +'use strict'; +const common = require('../common'); +const { + Event, + EventTarget, +} = require('internal/event_target'); +const { once } = require('events'); + +const et = new EventTarget(); +(async function() { + await once(et, 'foo'); + await once(et, 'foo'); +})().then(common.mustCall()); + +et.dispatchEvent(new Event('foo')); +setImmediate(() => { + et.dispatchEvent(new Event('foo')); +});