| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 517f17b commit 0c5092c
2 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -972,6 +972,8 @@ async function once(emitter, name, options = kEmptyObject) { | |||
| 972 | 972 | }; | |
| 973 | 973 | eventTargetAgnosticAddListener(emitter, name, resolver, { once: true }); | |
| 974 | 974 | if (name !== 'error' && typeof emitter.once === 'function') { | |
| 975 | + // EventTarget does not have `error` event semantics like Node | ||
| 976 | + // EventEmitters, we listen to `error` events only on EventEmitters. | ||
| 975 | 977 | emitter.once('error', errorListener); | |
| 976 | 978 | } | |
| 977 | 979 | function abortListener() { | |
@@ -1011,9 +1013,7 @@ function eventTargetAgnosticAddListener(emitter, name, listener, flags) { | |||
| 1011 | 1013 | emitter.on(name, listener); | |
| 1012 | 1014 | } | |
| 1013 | 1015 | } else if (typeof emitter.addEventListener === 'function') { | |
| 1014 | - // EventTarget does not have `error` event semantics like Node | ||
| 1015 | - // EventEmitters, we do not listen to `error` events here. | ||
| 1016 | - emitter.addEventListener(name, (arg) => { listener(arg); }, flags); | ||
| 1016 | + emitter.addEventListener(name, listener, flags); | ||
| 1017 | 1017 | } else { | |
| 1018 | 1018 | throw new ERR_INVALID_ARG_TYPE('emitter', 'EventEmitter', emitter); | |
| 1019 | 1019 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1,5 +1,5 @@ | |||
| 1 | 1 | 'use strict'; | |
| 2 | - // Flags: --no-warnings | ||
| 2 | + // Flags: --expose-internals --no-warnings | ||
| 3 | 3 | ||
| 4 | 4 | const common = require('../common'); | |
| 5 | 5 | const { once, EventEmitter } = require('events'); | |
@@ -9,6 +9,7 @@ const { | |||
| 9 | 9 | fail, | |
| 10 | 10 | rejects, | |
| 11 | 11 | } = require('assert'); | |
| 12 | + const { kEvents } = require('internal/event_target'); | ||
| 12 | 13 | ||
| 13 | 14 | async function onceAnEvent() { | |
| 14 | 15 | const ee = new EventEmitter(); | |
@@ -65,6 +66,32 @@ async function catchesErrors() { | |||
| 65 | 66 | strictEqual(ee.listenerCount('myevent'), 0); | |
| 66 | 67 | } | |
| 67 | 68 | ||
| 69 | + async function catchesErrorsWithAbortSignal() { | ||
| 70 | + const ee = new EventEmitter(); | ||
| 71 | + const ac = new AbortController(); | ||
| 72 | + const signal = ac.signal; | ||
| 73 | + | ||
| 74 | + const expected = new Error('boom'); | ||
| 75 | + let err; | ||
| 76 | + process.nextTick(() => { | ||
| 77 | + ee.emit('error', expected); | ||
| 78 | + }); | ||
| 79 | + | ||
| 80 | + try { | ||
| 81 | + const promise = once(ee, 'myevent', { signal }); | ||
| 82 | + strictEqual(ee.listenerCount('error'), 1); | ||
| 83 | + strictEqual(signal[kEvents].size, 1); | ||
| 84 | + | ||
| 85 | + await promise; | ||
| 86 | + } catch (e) { | ||
| 87 | + err = e; | ||
| 88 | + } | ||
| 89 | + strictEqual(err, expected); | ||
| 90 | + strictEqual(ee.listenerCount('error'), 0); | ||
| 91 | + strictEqual(ee.listenerCount('myevent'), 0); | ||
| 92 | + strictEqual(signal[kEvents].size, 0); | ||
| 93 | + } | ||
| 94 | + | ||
| 68 | 95 | async function stopListeningAfterCatchingError() { | |
| 69 | 96 | const ee = new EventEmitter(); | |
| 70 | 97 | ||
@@ -165,7 +192,10 @@ async function abortSignalAfterEvent() { | |||
| 165 | 192 | ee.emit('foo'); | |
| 166 | 193 | ac.abort(); | |
| 167 | 194 | }); | |
| 168 | - await once(ee, 'foo', { signal: ac.signal }); | ||
| 195 | + const promise = once(ee, 'foo', { signal: ac.signal }); | ||
| 196 | + strictEqual(ac.signal[kEvents].size, 1); | ||
| 197 | + await promise; | ||
| 198 | + strictEqual(ac.signal[kEvents].size, 0); | ||
| 169 | 199 | } | |
| 170 | 200 | ||
| 171 | 201 | async function abortSignalRemoveListener() { | |
@@ -221,6 +251,7 @@ Promise.all([ | |||
| 221 | 251 | onceAnEventWithNullOptions(), | |
| 222 | 252 | onceAnEventWithTwoArgs(), | |
| 223 | 253 | catchesErrors(), | |
| 254 | + catchesErrorsWithAbortSignal(), | ||
| 224 | 255 | stopListeningAfterCatchingError(), | |
| 225 | 256 | onceError(), | |
| 226 | 257 | onceWithEventTarget(), | |
| Back | FazBrowse Home | New Git URL |
0 commit comments