MCPcopy Index your code
hub / github.com/nodejs/node / once

Function once

lib/events.js:990–1032  ·  view source on GitHub ↗

* Creates a `Promise` that is fulfilled when the emitter * emits the given event. * @param {EventEmitter} emitter * @param {string | symbol} name * @param {{ signal: AbortSignal; }} [options] * @returns {Promise}

(emitter, name, options = kEmptyObject)

Source from the content-addressed store, hash-verified

988 * @returns {Promise}
989 */
990async function once(emitter, name, options = kEmptyObject) {
991 validateObject(options, 'options');
992 const { signal } = options;
993 validateAbortSignal(signal, 'options.signal');
994 if (signal?.aborted)
995 throw new AbortError(undefined, { cause: signal.reason });
996 return new Promise((resolve, reject) => {
997 const errorListener = (err) => {
998 emitter.removeListener(name, resolver);
999 if (signal != null) {
1000 eventTargetAgnosticRemoveListener(signal, 'abort', abortListener);
1001 }
1002 reject(err);
1003 };
1004 const resolver = (...args) => {
1005 if (typeof emitter.removeListener === 'function') {
1006 emitter.removeListener('error', errorListener);
1007 }
1008 if (signal != null) {
1009 eventTargetAgnosticRemoveListener(signal, 'abort', abortListener);
1010 }
1011 resolve(args);
1012 };
1013
1014 kResistStopPropagation ??= require('internal/event_target').kResistStopPropagation;
1015 const opts = { __proto__: null, once: true, [kResistStopPropagation]: true };
1016 eventTargetAgnosticAddListener(emitter, name, resolver, opts);
1017 if (name !== 'error' && typeof emitter.once === 'function') {
1018 // EventTarget does not have `error` event semantics like Node
1019 // EventEmitters, we listen to `error` events only on EventEmitters.
1020 emitter.once('error', errorListener);
1021 }
1022 function abortListener() {
1023 eventTargetAgnosticRemoveListener(emitter, name, resolver);
1024 eventTargetAgnosticRemoveListener(emitter, 'error', errorListener);
1025 reject(new AbortError(undefined, { cause: signal?.reason }));
1026 }
1027 if (signal != null) {
1028 eventTargetAgnosticAddListener(
1029 signal, 'abort', abortListener, { __proto__: null, once: true, [kResistStopPropagation]: true });
1030 }
1031 });
1032}
1033
1034function createIterResult(value, done) {
1035 return { done, value };

Calls 4

validateAbortSignalFunction · 0.85
requireFunction · 0.50
onceMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…